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

Nei*_*eil 6 python csv pandas

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

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

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

我有一个列 C,我想将其存储为字符串而不是整数。但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')
Run Code Online (Sandbox Code Playgroud)

上面的代码给我错误

ValueError: Expected 37 fields in line 1, saw 35
Run Code Online (Sandbox Code Playgroud)

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

2)

old_df['C'] = old_df['C'].astype(int)
Run Code Online (Sandbox Code Playgroud)

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

Zak*_*irn 3

在 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})
Run Code Online (Sandbox Code Playgroud)

如果您只是使用,dtype=str那么它将读取每一列作为字符串(对象)。但你不能用converters字典来做到这一点。您可以替换converters上面dtype的代码并得到相同的结果。