Impor kolom dataframe panda sebagai string bukan int


103

Saya ingin mengimpor csv berikut sebagai string, bukan sebagai int64. Pandas read_csv secara otomatis mengubahnya menjadi int64, tetapi saya membutuhkan kolom ini sebagai string.

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

Sayangnya menggunakan konverter memberikan hasil yang sama.

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
Ini jelas menyoroti masalah di mana konverter gagal berfungsi. Jadi, itu masih berguna selain pertanyaan yang disebutkan di atas.
Dav Clark

Jawaban:


157

Hanya ingin mengulangi ini akan berfungsi di pandas> = 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

Saya juga membuat masalah tentang mendeteksi bilangan bulat overflows.

EDIT: Lihat resolusi di sini: https://github.com/pydata/pandas/issues/2247


14
Hal ini juga tampaknya, jika Anda ingin semua kolom harus ditafsirkan sebagai string, seseorang dapat melakukan hal berikut: dtype = str.
steveb

Tampaknya ladang kosong masih muncul sebagai np.nan
Josiah Yoder

1
pertanyaan yang sama di sini. Tetapi saya menggunakan keep_default_na = False menyelesaikan masalah saya.
jtcloud

Terima kasih atas komentarnya Saya juga harus menggunakan dypte = str AND keep_default_na = False sehingga nilai null bukan nan.
Ross117

19

Ini mungkin bukan cara paling elegan untuk melakukannya, tetapi ini menyelesaikan pekerjaan.

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

Cukup ganti '/Users/spencerlyon2/Desktop/test.csv'dengan jalur ke file Anda


8

Sejak panda 1.0 menjadi jauh lebih mudah. Ini akan membaca kolom 'ID' sebagai dtype 'string':

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

Seperti yang bisa kita lihat di panduan Memulai ini , 'string' dtype telah diperkenalkan (sebelum string diperlakukan sebagai dtype 'object').

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.