Python 将dataframe列作为字符串而不是int导入

Python 将dataframe列作为字符串而不是int导入,python,pandas,casting,type-conversion,dtype,Python,Pandas,Casting,Type Conversion,Dtype,我想将以下csv作为字符串导入,而不是作为int64导入。Pandas read_csv自动将其转换为int64,但我需要将此列作为字符串 ID 00013007854817840016671868 00013007854817840016749251 00013007854817840016754630 00013007854817840016781876 00013007854817840017028824 00013007854817840017963235 000130078548178

我想将以下csv作为字符串导入,而不是作为int64导入。Pandas read_csv自动将其转换为int64,但我需要将此列作为字符串

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
不幸的是,使用转换器会得到同样的结果

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

这可能不是最优雅的方式,但它完成了任务

In[1]: import numpy as np

In[2]: import pandas as pd

In[3]: df = pd.DataFrame(np.genfromtxt('/Users/spencerlyon2/Desktop/test.csv', dtype=str)[1:], columns=['ID'])

In[4]: df
Out[4]: 
                       ID
0  00013007854817840016671868
1  00013007854817840016749251
2  00013007854817840016754630
3  00013007854817840016781876
4  00013007854817840017028824
5  00013007854817840017963235
6  00013007854817840018860166

只需将
'/Users/spenceryon2/Desktop/test.csv'
替换为您的文件路径

只需重申这将在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
我还提出了一个关于检测整数溢出的问题

编辑:请参见此处的分辨率:

在帮助他人时更新:

要将所有列作为str,可以这样做(从注释中):

要将大多数或选择性列作为str,可以执行以下操作:

# 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)

自从熊猫1.0以来,它变得更加简单。这将把列“ID”读取为数据类型“string”:

pd.read_csv('sample.csv',dtype={'ID':'string'})

正如我们在本文中看到的,引入了“string”数据类型(在字符串被视为数据类型“object”之前)。

它清楚地突出了转换器无法工作的问题。因此,除了上面提到的问题之外,它仍然很有用。另外,如果您希望所有列都被解释为字符串,您可以执行以下操作:
dtype=str
。在这里,空字段似乎仍然作为np.nansame问题出现。但是我用keep_default_na=False解决了我的问题。谢谢你的评论。我还必须使用dypte=str并保持_default_na=False,这样就不会出现空值。
pd.read_csv('sample.csv',dtype={'ID':'string'})