如何在read_csv中使用dtype将float转换为int?

时间:2019-12-10 22:34:58

标签: python pandas

我有一个包含5列的CSV文件。

Id           Origin      Space       Empl1       Empl2
11084676.0   0.0         0.0         0.0         NaN
11084654.0   0.0         0.0         0.0         0.0
11084591.0   0.0         0.0         0.0         0.0

由于文件很大,所以我想避免默认的类型分配。因此,我想将以下类型分配给列:

Id        int
Origin    str
Space     str
Empl1     str
Empl2     str

这是我的方法:

columns = ["Id", "Origin", "Space", "Empl1", "Empl2"]
types = ["int", "str", "str", "str", "str"]

df = pd.read_csv("myfile.csv", sep=';', header=0, dtype=dict(zip(columns, types)), usecols=columns, error_bad_lines=False, warn_bad_lines=True)

但是问题在于列Id包含浮点值:

  

TypeError:无法将数组从dtype('float64')转换为dtype('int32')   根据“安全”规则

反正有根据指定的数据类型强制转换吗?

2 个答案:

答案 0 :(得分:1)

之后,您可以尝试将类型强制转换为“ Id”,例如

df['Id'] = pd.to_numeric(df['Id'], downcast='unsigned', errors='coerce')

答案 1 :(得分:0)

这实际上是两行

types_dct = dict(zip(columns, types))
del types_dict['Id']
df = pd.read_csv("myfile.csv", sep=';', header=0, dtype=types_dict, usecols=columns, error_bad_lines=False, warn_bad_lines=True)