Importieren Sie die Pandas-Datenrahmenspalte als Zeichenfolge nicht int


95

Ich möchte die folgende CSV als Zeichenfolge importieren, nicht als int64. Pandas read_csv konvertiert es automatisch in int64, aber ich brauche diese Spalte als Zeichenfolge.

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

Leider führt die Verwendung von Konvertern zum gleichen Ergebnis.

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
Es wird ein Problem deutlich, bei dem Konverter nicht funktionieren. Es ist also immer noch nützlich, zusätzlich zu der oben genannten Frage.
Dav Clark

Antworten:


149

Ich möchte nur wiederholen, dass dies in Pandas> = 0.9.1 funktioniert:

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

Ich erstelle ein Problem beim Erkennen von Ganzzahlüberläufen.

BEARBEITEN: Siehe Auflösung hier: https://github.com/pydata/pandas/issues/2247


14
Wenn Sie möchten, dass alle Spalten als Zeichenfolgen interpretiert werden, können Sie Folgendes tun : dtype = str.
Steveb

Es scheint, dass leere Felder immer noch als np.nan
Josiah Yoder

1
gleiche Frage hier. Aber ich habe keep_default_na = False verwendet, um mein Problem zu beheben.
T.Yun

Vielen Dank für die Kommentare. Ich musste auch dypte = str AND keep_default_na = False verwenden, damit Nullwerte nicht nan waren.
Ross117

18

Dies ist wahrscheinlich nicht die eleganteste Art, dies zu tun, aber es erledigt die Arbeit.

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

Ersetzen Sie einfach durch '/Users/spencerlyon2/Desktop/test.csv'den Pfad zu Ihrer Datei


5

Seit Pandas 1.0 wurde es viel einfacher. Dies liest die Spalte 'ID' als dtype 'string':

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

Wie wir in diesem sehen Getting Started Guide , ‚string‘ dtype eingeführt worden ist (vor Strings als dtype ‚Objekt‘ behandelt wurden).

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.