如何使用dtype liste而不是str导入csv列

时间:2017-02-24 09:23:13

标签: python python-3.x pandas

我有一个csv文件。 一列是某个城镇的平均海拔高度列表。 例如,他的一个元素可以是[571.0,428.0,600.0,410.0,588.0,520.0,649.0,374.0]

当我这样做时:

data=pd.read_csv('test.csv', sep=";", encoding="utf-8-sig",dtype={'Mean_Altitude':list})

a=data['Mean_Altitude'][0]
print a
print type(a)

我明白了:

[571.0, 428.0, 600.0, 410.0, 588.0, 520.0, 649.0, 374.0]
<type 'unicode'>

我想要一个浮动列表....不是unicode或字符串......

你知道我怎么做吗?

2 个答案:

答案 0 :(得分:2)

这是一个想法。在ast.literal_eval

converters参数中使用pd.read_csv

将字符串txt视为我们的示例csv

from io import StringIO
import pandas as pd
import ast

txt = """A|Mean_Altitude|B
1|[571.0, 428.0, 600.0, 410.0, 588.0, 520.0, 649.0, 374.0]|X
2|[571.0, 428.0, 600.0, 410.0, 588.0, 520.0, 649.0, 374.0]|Y"""

converters = {'Mean_Altitude': ast.literal_eval}
df = pd.read_csv(StringIO(txt), sep='|', converters=converters)

print(df)

   A                                      Mean_Altitude  B
0  1  [571.0, 428.0, 600.0, 410.0, 588.0, 520.0, 649...  X
1  2  [571.0, 428.0, 600.0, 410.0, 588.0, 520.0, 649...  Y

Mean_Altitude是一列列表

df.Mean_Altitude.loc[0][2]

600.0

type

type(df.Mean_Altitude.loc[0])

list

答案 1 :(得分:0)

您可以删除[],然后在,

上拆分字符串
s = '[571.0, 428.0, 600.0, 410.0, 588.0, 520.0, 649.0, 374.0]'
[float(substring) for substring in s[1:-1].split(', ')]

如果您想确定字符串确实是一个列表,可以使用正则表达式

进行检查