2012-05-14 78 views
26

我刚开始使用熊猫,我正在使用read_csv()方法在csv文件中阅读。我遇到的困难是阻止大熊猫将我的电话号码转换为大数字,而不是将它们保持为字符串。我定义了一个转换器,它只保留了数字,但他们仍然转换为数字。当我改变我的转换器以在电话号码前添加'z'时,他们保留了字符串。有没有办法让他们保持字符串不修改字段的值?在熊猫csv阅读器中指定数据类型

+2

请向我们显示您的代码 –

+3

@Gardner:你有没有考虑接受答案? –

回答

13

看起来你不能避免熊猫试图转换CSV文件中的数值/布尔值。查看IO解析器的熊猫源代码,特别是函数_convert_to_ndarrays_convert_typeshttps://github.com/pydata/pandas/blob/master/pandas/io/parsers.py

你总是可以指定你想要后您已经阅读文件类型:

df.phone = df.phone.astype(str) 
+1

谢谢@lbolla,这有助于我的一个错误修正,其中一个浮点值被读为字符串,因为另一个字段是字符串,后来在聚集函数中导致问题。我必须做df ['col'] = df ['col']。astype(float64) –

28

由于熊猫0.11.0可以使用D型参数为每列显式指定数据类型:

d = pandas.read_csv('foo.csv', dtype={'BAR': 'S10'}) 
+1

请注意,这是不可用的(但希望)对于其他一些输入函数,如'pandas.read_fwf()' – ReneSac

+2

I重新访问该主题,并支持'dtype'已经被添加到'pandas.read_fwf' :) – zero323

+0

这种方法不适用于大数据集有没有其他方式来读取csv和只有特定的列。 –