2012-11-08 22 views
39

Vorrei importare il seguente csv come stringhe non come int64. Pandas read_csv lo converte automaticamente in int64, ma ho bisogno di questa colonna come stringa.Importa colonna dataframe panda come stringa non 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 

Sfortunatamente l'utilizzo di convertitori dà lo stesso risultato.

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

Questo è un duplicato di questa domanda: http://stackoverflow.com/questions/13250046/pandas-csv-import-keep-leading-zeros-in-a- colonna –

+1

Evidenzia chiaramente un problema in cui i convertitori non funzionano. Quindi, è ancora utile in aggiunta alla domanda di cui sopra. –

risposta

63

Voglio solo ribadire questo funzionerà in panda> = 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 

Sto creando un problema sul rilevamento anche il numero intero trabocca.

EDIT: Vedere risoluzione qui: https://github.com/pydata/pandas/issues/2247

+0

Sto usando la versione di sviluppo 0.9.1 per un po 'ora, e funziona perfettamente. Grazie! – Oliver

+1

Sembra anche che se si desidera che tutte le colonne vengano interpretate come stringhe, si può fare quanto segue: 'dtype = str'. – steveb

7

Questo probabilmente non è il modo più elegante per farlo, ma ha il compito.

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 

Basta sostituire '/Users/spencerlyon2/Desktop/test.csv' con il percorso del file

Problemi correlati