我有一个包含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') 根据“安全”规则
反正有根据指定的数据类型强制转换吗?
答案 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)