问题:将pandas dataframe列导入为字符串而不是int
我想将以下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
回答 0
只是想重申一下,这将适用于> = 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
回答 1
这可能不是最优雅的方法,但是可以完成工作。
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'
为文件的路径
回答 2
从pandas 1.0开始,它变得更加简单。这会将列“ ID”读取为dtype“ string”:
pd.read_csv('sample.csv',dtype={'ID':'string'})
如我们在本入门指南中所见,引入了’string’dtype(在将字符串视为dtype’object’之前)。