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


97

我想将以下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

3
它清楚地突出了转换器无法工作的问题。因此,除了上述问题之外,它仍然有用。
达夫·克拉克

Answers:


152

只是想重申一下,这将适用于> = 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

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

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


14
看来,如果您希望将所有列都解释为字符串,则可以执行以下操作:dtype = str
史蒂夫(Steveb),2017年

看起来像np.nan一样,空旷的田地还是会经过
Josiah Yoder

1
同样的问题在这里。但是我用keep_default_na = False解决了我的问题。
Jack.Lee

谢谢你的意见。我还必须使用dypte = str和keep_default_na = False,以使null值不是nan。
Ross117

19

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

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'为文件的路径


6

从pandas 1.0开始,它变得更加简单。这会将列“ ID”读取为dtype“ string”:

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

如我们在本入门指南中所见,引入了'string'dtype(在将字符串视为dtype'object'之前)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.