Python - 使用 Pandas 消除大括号和输出浮点数

Posted

技术标签:

【中文标题】Python - 使用 Pandas 消除大括号和输出浮点数【英文标题】:Python - Using Pandas to eliminated curly brackets and output floats 【发布时间】:2016-11-02 15:56:54 【问题描述】:

拥有如此庞大的 csv 数据集,每列基本上都有 x 和 y 值。

"733.15, 179.5",
"565.5, 642.5",
"172.5, 375.5",
"223.5, 554.5",....

...., 
"213.5, 666.5",
"851.5, 323.5",
"498.5, 638.5",
"763.5, 102.5"

或通过表格,

一列本质上就是这个集合,我可以通过索引来调用每一对。

import numpy as np
import pandas as pd
import csv

brown = pd.read_csv('BrownM.csv',delimiter=',', header=None)

print brown[0]

这实际上调用了上面的行

print brown[0][0]

返回733.15, 179.5

但是当想要在这个集合中选择一个值时,

   print brown[0][0][1]

返回7

当我希望它在调用时返回浮点数时,它将这个数据集视为一个字符串。

另外,他们是否可以将文件传递到消除大括号的位置?

【问题讨论】:

我想你可能和我在***.com/questions/37994791/…有同样的问题阅读cmets,有literal_eval可以帮助你。 【参考方案1】:

或者你可以extract 然后split

df.col1.str.extract(r'(.*)', expand=False).str.split(', ', expand=True)

时间

MaxU 的解决方案更快,因为它一步完成,而我的解决方案需要两个步骤。

【讨论】:

【参考方案2】:

更新:

def str2coords(df, col, new_cols):
    df[new_cols] = df[col].str.extract(r'\([\d\.]+),\s*([\d\.]+)\', expand=True).astype(np.float64)
    return df.drop(col, axis=1)

In [204]: df
Out[204]:
            coord1         coord2
0  733.15, 179.5  33.15, 79.5
1   565.5, 642.5  65.5, 42.5
2   172.5, 375.5  72.5, 75.5
3   223.5, 554.5  23.5, 54.5
4   213.5, 666.5  13.5, 66.5
5   851.5, 323.5  51.5, 23.5
6   498.5, 638.5  98.5, 38.5
7   763.5, 102.5  63.5, 02.5

In [205]: df = str2coords(df, 'coord1', ['x1','y1'])

In [206]: df = str2coords(df, 'coord2', ['x2','y2'])

In [207]: df
Out[207]:
       x1     y1     x2    y2
0  733.15  179.5  33.15  79.5
1  565.50  642.5  65.50  42.5
2  172.50  375.5  72.50  75.5
3  223.50  554.5  23.50  54.5
4  213.50  666.5  13.50  66.5
5  851.50  323.5  51.50  23.5
6  498.50  638.5  98.50  38.5
7  763.50  102.5  63.50   2.5

In [208]: df.dtypes
Out[208]:
x1    float64
y1    float64
x2    float64
y2    float64
dtype: object

您可以使用.str.extract() 函数将坐标解析为单独的列:

In [155]: df[['x','y']] = df.coord.str.extract(r'\([\d\.]+),\s*([\d\.]+)\', expand=True)

In [156]: df
Out[156]:
             coord       x      y
0  733.15, 179.5  733.15  179.5
1   565.5, 642.5   565.5  642.5
2   172.5, 375.5   172.5  375.5
3   223.5, 554.5   223.5  554.5
4   213.5, 666.5   213.5  666.5
5   851.5, 323.5   851.5  323.5
6   498.5, 638.5   498.5  638.5
7   763.5, 102.5   763.5  102.5

【讨论】:

我已将帖子编辑到包含表格的位置。同样应该适用正确吗? @DarthLazar,请检查“更新”【参考方案3】:

您可以对字符串使用正则表达式,然后将其解析为浮点数。

import re

# Returns 733.15
float(re.match(r'\(.*),\s*(.*)\', '733.15, 179.5').group(1))

# Returns 179.5
float(re.match(r'\(.*),\s*(.*)\', '733.15, 179.5').group(2))

【讨论】:

以上是关于Python - 使用 Pandas 消除大括号和输出浮点数的主要内容,如果未能解决你的问题,请参考以下文章

python - 将文件读入字典 - 用大括号分隔,没有逗号分隔符

使用正则表达式在 Pandas 数据框中字符串开头的大括号内去除数字

怎样消除参考文献中的方括号和内容之间的空格?

python大数据处理模块pandas

小蛇学python(10)tkinter和pandas的补充

Python和MATLAB的小括号( )、中括号[ ]和大括号