Імпортувати стовпець кадру даних pandas як рядок, не int


97

Я хотів би імпортувати наступні csv як рядки, а не як int64. Pandas read_csv автоматично перетворює його на int64, але мені потрібен цей стовпець як рядок.

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

3
Це чітко висвітлює проблему, коли перетворювачі не працюють. Отже, це все ще корисно на додаток до вищезазначеного питання.
Dav Clark

Відповіді:


152

Просто хочу повторити, що це буде працювати в пандах> = 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

Я також створюю проблему щодо виявлення цілочисельних переповнення.

EDIT: Див. Резолюцію тут: https://github.com/pydata/pandas/issues/2247


14
Крім того , здається, якщо ви хочете , щоб всі стовпці повинні інтерпретуватися як рядки, можна зробити наступне: dtype = str.
steveb

Здається, порожні поля все ще проходять як np.nan
Йодер

1
те саме питання тут. Але я використовував keep_default_na = False вирішив мою проблему.
Джек.

Дякую за коментарі. Мені також довелося використовувати dypte = str І keep_default_na = False, щоб нульові значення не були nan.
Ross117

19

Це, мабуть, не найелегантніший спосіб зробити це, але це робить роботу.

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'шляхом до вашого файлу


6

З версії pandas 1.0 це стало набагато простішим. Це буде читати стовпець "ID" як dtype "рядок":

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

Як ми можемо бачити в цьому посібнику з початку роботи , було введено "рядок" dtype (до того, як рядки розглядалися як dtype "об'єкт").

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.