我有一个没有标题的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'。它会丢失初始零,因为它认为它是整数。
答案 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
,并获得相同的结果。