2012-11-08 13 views
39

Chciałbym importować następujące csv jako ciągi nie jako Int64. Panda read_csv automatycznie konwertuje ją do formatu Int 64, ale potrzebuję tej kolumny jako łańcucha.importu kolumna pandy dataframe jako ciąg nie 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 

Niestety użycie konwerterów daje ten sam efekt.

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

Jest to duplikat to pytanie: http://stackoverflow.com/questions/13250046/pandas-csv-import-keep-leading-zeros-in-a- kolumna –

+1

Wyraźnie podkreśla problem, w którym konwertery nie działają. Nadal jest przydatny w uzupełnieniu do wyżej wspomnianego pytania. –

Odpowiedz

63

prostu chce powtórzyć to będzie działać w pand> = 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 

Tworzę problem o wykryciu również przepełnienia całkowite.

EDIT: Zobacz rozdzielczości tutaj: https://github.com/pydata/pandas/issues/2247

+0

Używam od teraz wersji rozwojowej 0.9.1 i działa dobrze. Dzięki! – Oliver

+1

Wydaje się również, że jeśli chcesz, aby wszystkie kolumny były interpretowane jako łańcuchy, można wykonać następujące czynności: 'dtype = str'. – steveb

7

Prawdopodobnie nie jest to najbardziej elegancka metoda, ale wykonuje to zadanie.

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 

Wystarczy zastąpić '/Users/spencerlyon2/Desktop/test.csv' ze ścieżką do pliku