Pandas 데이터 프레임 열을 정수가 아닌 문자열로 가져 오기


102

다음 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

답변:


156

이것은 팬더> = 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

정수 오버플로 감지에 대한 문제도 만들고 있습니다.

편집 : 여기에서 해결 방법 참조 : https://github.com/pydata/pandas/issues/2247


14
또한 모든 열을 문자열로 해석하려면 다음을 수행 할 수 있습니다 dtype = str..
steveb

빈 필드는 여전히 np.nan로 통해 온 것 같다
요시야 Yoder 보낸 사람에게

1
여기에 같은 질문입니다. 하지만 나는 keep_default_na = False를 사용하여 문제를 해결했습니다.
jtcloud

의견을 보내 주셔서 감사합니다. 또한 null 값이 nan이 아니도록 dypte = str AND keep_default_na = False를 사용해야했습니다.
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'파일 경로로 바꾸 십시오.


8

pandas 1.0 이후로 훨씬 더 간단 해졌습니다. 이것은 'ID'열을 dtype 'string'으로 읽습니다.

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

시작 안내서 에서 볼 수 있듯이 'string'dtype이 도입되었습니다 (문자열이 dtype 'object'로 처리되기 전).

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.