将熊猫数据框列导入为字符串而不是整型

我想以字符串的形式导入下面的 csv,而不是 int64。熊猫 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
175996 次浏览

这可能不是最优雅的方式,但它可以完成工作。

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/spencerlyon2/Desktop/test.csv'替换为文件的路径即可

只是想重申一下,这个方法在熊猫身上是有效的:

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

我还创建了一个关于检测整数溢出的问题。

编辑: 请看这里的分辨率: https://github.com/pydata/pandas/issues/2247

在帮助他人时更新:

要将 所有柱子设置为 str,可以这样做(根据注释) :

pd.read_csv('sample.csv', dtype = 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’读作 dtype‘ string’:

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

正如我们在这个 入门指南中看到的,‘ string’dtype 已经被引入(在字符串被视为 dtype‘ object’之前)。