gpt4 book ai didi

python - 将单位与 Pandas DataFrame 关联

转载 作者:行者123 更新时间:2023-12-01 05:44:50 25 4
gpt4 key购买 nike

我正在使用返回 CSV 响应的 Web 服务,其中第一行包含列名称,第二行包含列单位,例如:

longitude,latitude
degrees_east,degrees_north
-142.842,-1.82
-25.389,39.87
-37.704,27.114

我可以将其读入 Pandas DataFrame:

import pandas as pd
from StringIO import StringIO

x = '''
longitude,latitude
degrees_east,degrees_north
-142.842,-1.82
-25.389,39.87
-37.704,27.114
'''

# Create a Pandas DataFrame
obs=pd.read_csv(StringIO(x.strip()), sep=",\s*")

print(obs)

产生

      longitude       latitude
0 degrees_east degrees_north
1 -142.842 -1.82
2 -25.389 39.87
3 -37.704 27.114

但是将单位与 DataFrame 列关联起来以供以后使用(例如标记图)的最佳方法是什么?

最佳答案

允许 pandas 读取第二行数据会搞乱列的数据类型。字符串的存在使列的数据类型不是float dtype,而是object,并且底层对象(甚至数字)都是字符串。这搞砸了所有的数值运算:

In [8]: obs['latitude']+obs['longitude']
Out[8]:
0 degrees_northdegrees_east
1 -1.82-142.842
2 39.87-25.389
3 27.114-37.704

In [9]: obs['latitude'][1]
Out[9]: '-1.82'

因此,pd.read_csv 必须跳过第二行。

下面的内容相当难看,但考虑到输入的格式,我没有看到更好的方法。

import pandas as pd
from StringIO import StringIO

x = '''
longitude,latitude
degrees_east,degrees_north
-142.842,-1.82
-25.389,39.87
-37.704,27.114
'''

content = StringIO(x.strip())

def read_csv(content):
columns = next(content).strip().split(',')
units = next(content).strip().split(',')
obs = pd.read_table(content, sep=",\s*", header=None)
obs.columns = ['{c} ({u})'.format(c=col, u=unit)
for col, unit in zip(columns, units)]
return obs

obs = read_csv(content)
print(obs)
# longitude (degrees_east) latitude (degrees_north)
# 0 -142.842 -1.820
# 1 -25.389 39.870
# 2 -37.704 27.114
print(obs.dtypes)
# longitude (degrees_east) float64
# latitude (degrees_north) float64

关于python - 将单位与 Pandas DataFrame 关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16409050/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com