2012-11-08 56 views
39

我想導入下面的csv作爲字符串而不是int64。熊貓read_csv自動將其轉換爲int64,但我需要此列作爲字符串。作爲字符串導入熊貓dataframe列不是int

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 
+2

這是這個問題的一個副本:http://stackoverflow.com/questions/13250046/pandas-csv-import-keep-leading-zeros-in-a-列 –

+1

這明確強調了轉換器無法工作的問題。所以,除了上面提到的問題之外,它仍然是有用的。 –

回答

63

只是想重申這將在熊貓> = 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

+0

我現在正在使用開發0.9.1版本,並且它工作正常。謝謝! – Oliver

+1

它也似乎是,如果你想所有的列被解釋爲字符串,可以執行以下操作:'dtype = str'。 – steveb

7

這可能不是最優雅的方式,但它完成了工作。

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'到您的文件