使用pandas数据框读取时,避免自动将数据转换为int

时间:2016-03-04 07:22:30

标签: python csv pandas

我有一个没有标题的csv文件。它有大约35列。

我正在使用pandas阅读此文件。 目前,问题是当它读取文件时,会自动为每个列分配数据类型。

如何避免分配自动数据类型?

我有一个C列,我希望将其存储为字符串而不是int。但是pandas会自动将它分配给int

我尝试了两件事。

1)

my_df = pd.DataFrame()
my_df = pd.read_csv('my_csv_file.csv',names=['A','B','C'...'Z'],converters={'C':str},engine = 'python')

上面的代码给出了错误

ValueError: Expected 37 fields in line 1, saw 35

如果我删除,converters={'C':str},engine = 'python'没有错误

2)

old_df['C'] = old_df['C'].astype(int)

这种方法的问题是,如果列中的值为'00123',则它已经转换为123,然后将其转换为'123'。它会丢失初始零,因为它认为它是整数。

1 个答案:

答案 0 :(得分:0)

在read_csv read_csv doc中使用dtype选项或转换器,无论是否使用python引擎都可以工作:

df = pd.DataFrame({'col1':['00123','00125'],'col2':[1,2],'col3':[1.0,2.0]})
df.to_csv('test.csv',index=False)
new_df = pd.read_csv('test.csv',dtype={'col1':str,'col2':np.int64,'col3':np.float64})

如果仅使用dtype=str,则它将以字符串(对象)的形式读取每一列。但是您不能使用converters来做到这一点,因为它需要字典。您可以在上面的代码中用converters代替dtype,并获得相同的结果。