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 数据框中字符串开头的大括号内去除数字