pandas.read_csv를 가져 와서 빈 값을 nan 대신 빈 문자열로 읽습니다.


101

일부 CSV 데이터를 읽기 위해 pandas 라이브러리를 사용하고 있습니다. 내 데이터에서 특정 열에는 문자열이 포함되어 있습니다. 문자열 "nan"은 빈 문자열과 마찬가지로 가능한 값입니다. 팬더가 "nan"을 문자열로 읽도록 만들었지 만 빈 값을 NaN으로 읽지 않도록하는 방법을 알아낼 수 없습니다. 다음은 샘플 데이터 및 출력입니다.

One,Two,Three
a,1,one
b,2,two
,3,three
d,4,nan
e,5,five
nan,6,
g,7,seven

>>> pandas.read_csv('test.csv', na_values={'One': [], "Three": []})
    One  Two  Three
0    a    1    one
1    b    2    two
2  NaN    3  three
3    d    4    nan
4    e    5   five
5  nan    6    NaN
6    g    7  seven

"nan"을 문자열 "nan '으로 올바르게 읽지 만 여전히 빈 셀을 NaN으로 읽습니다. 인수를 read_csv (with ) str에 전달하려고 시도 했지만 여전히 빈 셀을 NaN으로 읽습니다.convertersconverters={'One': str})

필 나로 읽은 후 값을 채울 수 있다는 것을 알고 있지만 팬더에게 특정 CSV 열의 빈 셀을 NaN 대신 빈 문자열로 읽어야한다고 말할 수있는 방법이 정말 없습니까?


keep_default_na아래의 최신 옵션을 사용하여 더 간단하게 대답하십시오 .
nealmcb

답변:


57

여기에 일종의 옵션을 추가하기 위해 티켓을 추가했습니다.

https://github.com/pydata/pandas/issues/1450

그동안 result.fillna('')원하는 것을해야합니다.

편집 : 개발 버전 (최종 0.8.0)에서 빈 목록을 지정하면 na_values빈 문자열이 결과에 빈 문자열로 유지됩니다.


12
에 대한 문서 DataFrame.fillna. 시도해보십시오 result.fillna('', inplace=True). 그렇지 않으면 데이터 프레임의 복사본을 만듭니다.
Sergey Orshanskiy 2014 년

1
그런 오래된 대답을 부활 시켜서 미안하지만 이런 일이 일어난 적이 있습니까? 이 GitHub PR 에서 알 수있는 한 병합되지 않고 닫혔으며 pandas 버전 0.14.x에서 요청 된 동작이 보이지 않습니다
drammock

10
read_csv에 대한 문서 는 이제 na_values(열로 인덱싱 된 목록 또는 사전) 및 keep_default_na(bool)을 모두 제공합니다 . 이 keep_default_na값은 Pandas의 기본 NA 값을 바꾸거나 추가해야하는지 여부를 나타냅니다. 이 플래그가 없기 때문에 OP의 코드가 현재 작동하지 않습니다. 이 예에서는 pandas.read_csv('test.csv',na_values=['nan'], keep_default_na=False).
Michael Delgado 2015 년

@delgadom 나를 이끌어 주셔서 감사합니다 keep_default_na. 그러나 그는 'nan'이 기본값으로 취급되는 것을 원하지 않습니다. 새로운 답변으로 더 완전한 설명을 추가했습니다.
nealmcb

이것에 다시 부딪쳤다. 수정은 쉽지만 (가장 좋은 대답은 아래와 같습니다 keep_default_na=False) 이것에 대한 pandas 기본 동작은 IMO가 나쁩니다. 어떤 이유로 pandas read_csv가 열이 숫자가 아니라고 추론하는 경우 빈 문자열을 NaN으로 자동 변경해서는 안됩니다.
pietroppeter

114

다른 답변과 댓글을 읽은 후에도 여전히 혼란 스러웠습니다. 그러나 이제 대답은 더 간단 해 보이므로 여기에 있습니다.

Pandas 버전 0.9 (2012 년부터)부터 간단히 설정하면 빈 셀이 빈 문자열로 해석되는 csv를 읽을 수 있습니다 keep_default_na=False.

pd.read_csv('test.csv', keep_default_na=False)

이 문제는

2012 년 8 월 19 일에 Pandas 버전 0.9에서 수정되었습니다.


5
이것은 분명히 최선의 답변이며 첫 번째 솔루션으로 지정되어야합니다. 감사 @nealmcb
dzof31

3
이것이 더 인기있는 답변이 아닌 이유는 무엇입니까? 어제부터이 솔루션을 찾고있었습니다. 감사!
anish

7

이를 위해 Pandas read_csv에 간단한 인수가 있습니다.

사용하다:

df = pd.read_csv('test.csv', na_filter= False)

Pandas 문서는 위의 주장이 어떻게 작동하는지 명확하게 설명합니다.

링크


OP na_values "nan"을 인식하는 데 사용하려는 것처럼 보이지만 na_filter완전히 끄면 실패합니다. 따라서 keep_default_na=False.
nealmcb
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.