问题描述
我想将以下 csv 作为字符串而不是 int64 导入.pandas read_csv 自动将其转换为 int64,但我需要此列作为字符串.
i would like to import the following csv as strings not as int64. pandas read_csv automatically converts it to int64, but i need this column as string.
id 00013007854817840016671868 00013007854817840016749251 00013007854817840016754630 00013007854817840016781876 00013007854817840017028824 00013007854817840017963235 00013007854817840018860166 df = read_csv('sample.csv') df.id >> 0 -9223372036854775808 1 -9223372036854775808 2 -9223372036854775808 3 -9223372036854775808 4 -9223372036854775808 5 -9223372036854775808 6 -9223372036854775808 name: id
不幸的是,使用转换器会得到相同的结果.
unfortunately using converters gives the same result.
df = read_csv('sample.csv', converters={'id': str}) df.id >> 0 -9223372036854775808 1 -9223372036854775808 2 -9223372036854775808 3 -9223372036854775808 4 -9223372036854775808 5 -9223372036854775808 6 -9223372036854775808 name: id
推荐答案
只是想重申这将适用于 pandas >= 0.9.1:
just want to reiterate this will work in pandas >= 0.9.1:
in [2]: read_csv('sample.csv', dtype={'id': object}) out[2]: id 0 00013007854817840016671868 1 00013007854817840016749251 2 00013007854817840016754630 3 00013007854817840016781876 4 00013007854817840017028824 5 00013007854817840017963235 6 00013007854817840018860166
我也在创建一个关于检测整数溢出的问题.
i'm creating an issue about detecting integer overflows also.
在此处查看百家乐凯发k8的解决方案:https://github.com/pydata/pandas/issues/2247
更新,因为它可以帮助他人:
update as it helps others:
要将所有列作为str,可以这样做(来自评论):
to have all columns as str, one can do this (from the comment):
pd.read_csv('sample.csv', dtype = str)
要将大多数或选择性列作为str,可以这样做:
to have most or selective columns as str, one can do this:
# lst of column names which needs to be string lst_str_cols = ['prefix', 'serial'] # use dictionary comprehension to make dict of dtypes dict_dtypes = {x : 'str' for x in lst_str_cols} # use dict on dtypes pd.read_csv('sample.csv', dtype=dict_dtypes)