【问题标题】:Avoid converting data to int automatically while reading using pandas data frame避免在使用 pandas 数据框读取时自动将数据转换为 int
【发布时间】:2018-12-08 06:56:20
【问题描述】:

我有一个没有标题的 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'。它会丢失初始 Zeroes ,因为它认为它是整数。

【问题讨论】:

标签: python csv pandas


【解决方案1】:

在 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 并得到相同的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-08-19
    • 2019-05-14
    • 2013-07-30
    • 2021-02-10
    • 2020-06-17
    • 1970-01-01
    • 2019-07-01
    相关资源
    最近更新 更多