Importa colonna dataframe panda come stringa non int


97

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.

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

Purtroppo 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

3
Evidenzia chiaramente un problema in cui i convertitori non funzionano. Quindi, è ancora utile in aggiunta alla domanda sopra menzionata.
Dav Clark

Risposte:


152

Voglio solo ribadire che funzionerà con i 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 anche sul rilevamento degli overflow di interi.

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


14
Sembra anche, se si vuole tutte le colonne per essere interpretati come stringhe, si può fare quanto segue: dtype = str.
steveb

Sembra che i campi vuoti arrivino ancora come np.nan
Josiah Yoder,

1
stessa domanda qui. Ma ho usato keep_default_na = False ha risolto il mio problema.
Jack

Grazie per i commenti. Ho anche dovuto usare dypte = str AND keep_default_na = False in modo che i valori null non fossero nan.
Ross117

19

Questo probabilmente non è il modo più elegante per farlo, ma porta a termine il lavoro.

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


6

Dal momento che Panda 1.0 è diventato molto più semplice. Questo leggerà la colonna "ID" come dtype "stringa":

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

Come possiamo vedere in questa guida introduttiva, è stato introdotto il dtype 'string' (prima che le stringhe fossero trattate come dtype 'object').

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.