판다가 문자열에서 'NA'를 NaN으로 해석하지 못하도록 합니다.
pandas read_csv() 메서드는 'NA'를 유효한 문자열이 아닌 nan(숫자가 아님)으로 해석합니다.
아래의 간단한 경우, 1열 2열(0 기반 카운트)의 출력은 'NA'가 아닌 'nan'입니다.
sample.tsv(탭 구분)
PDB 체인 SP_1차 RES_BEG RES_END PDB_BEG PDB_END SP_BEG SP_END
5d8b NP60490 1 1461 146
5d8b NA P80377 1 126 1 126
5d8b OP60491 1181 1181 118
read_sample.py
import pandas as pd
df = pd.read_csv(
'sample.tsv',
sep='\t',
encoding='utf-8',
)
for df_tuples in df.itertuples(index=True):
print(df_tuples)
산출량
(0, u'5d8b', u'N', u'P60490', 1, 146, 1, 146, 1, 146)
(1, u'5d8b', nan, u'P80377', 1, 126, 1, 126, 1, 126)
(2, u'5d8b', u'O', u'P60491', 1, 118, 1, 118, 1, 118)
추가 정보
'CHANK' 열에 있는 데이터에 대한 따옴표를 사용하여 파일을 다시 작성한 다음 따옴표 매개 변수 사용quotechar='\''
결과가 같습니다.그리고 dtype 매개 변수를 통해 유형 사전 전달dtype=dict(valid_cols)
결과는 변경되지 않습니다.
read_csv에서 판다가 자동으로 유형을 유추하지 못하도록 방지하는 기존의 답변은 먼저 numpy 레코드 배열을 사용하여 파일을 구문 분석하는 것을 제안하지만, 이제 열 dtype을 지정할 수 있는 기능을 고려할 때 이는 필요하지 않습니다.
itertuples()는 반복 행 문서에 설명된 대로 보존된 형식을 사용합니다. "행을 반복하는 동안 보존된 형식을 사용하려면 값의 튜플을 반환하고 일반적으로 행에 따라 더 빠른 형식을 사용하는 것이 좋습니다."
예제는 Python 2 및 3에서 판다 버전 0.16.2, 0.17.0 및 0.17.1로 테스트되었습니다.
nan으로 변환되지 않고 유효한 문자열 'NA'를 캡처할 수 있는 방법이 있습니까?
매개 변수를 사용할 수 있습니다.keep_default_na
그리고.na_values
모든 NA 값을 수동 문서로 설정하려면:
import pandas as pd
from io import StringIO
data = """
PDB CHAIN SP_PRIMARY RES_BEG RES_END PDB_BEG PDB_END SP_BEG SP_END
5d8b N P60490 1 146 1 146 1 146
5d8b NA P80377 _ 126 1 126 1 126
5d8b O P60491 1 118 1 118 1 118
"""
df = pd.read_csv(StringIO(data), sep=' ', keep_default_na=False, na_values=['_'])
In [130]: df
Out[130]:
PDB CHAIN SP_PRIMARY RES_BEG RES_END PDB_BEG PDB_END SP_BEG SP_END
0 5d8b N P60490 1 146 1 146 1 146
1 5d8b NA P80377 NaN 126 1 126 1 126
2 5d8b O P60491 1 118 1 118 1 118
In [144]: df.CHAIN.apply(type)
Out[144]:
0 <class 'str'>
1 <class 'str'>
2 <class 'str'>
Name: CHAIN, dtype: object
편집
모두 기본값NA
na-값의 값(기준)pandas
1.0.0):
기본 NaN 인식 값은 [-1]입니다.#IND', '1.#QNAN', '1.#IND', '-1.#QNAN', '#N/A N/A', '#N/A', 'N/a', 'NA', '#NA', 'NULL', 'NaN', '-Nan', '-nan', '.', '.
나에게 솔루션은 매개 변수를 사용하는 것에서 비롯되었습니다.na_filter = False
df = pd.read_csv(file_, header=0, dtype=object, na_filter = False)
설정keep_default_na
매개 변수가 효과를 발휘합니다.
다음은 보관의 예입니다.NA
Panda를 사용하여 CSV 파일을 읽는 동안 문자열 값으로 사용됩니다.
data.csv
:
country_name,country_code
Mexico,MX
Namibia,NA
read_data.py
:
import pandas as pd
data = pd.read_csv("data.csv", keep_default_na=False)
print(data.describe())
print(data)
출력:
country_name country_code
count 2 2
unique 2 2
top Namibia MX
freq 1 1
country_name country_code
0 Mexico MX
1 Namibia NA
참조:
이 접근 방식은 다음과 같습니다.
import pandas as pd
df = pd.read_csv('Test.csv')
co1 col2 col3 col4
a b c d e
NaN NaN NaN NaN NaN
2 3 4 5 NaN
값을 복사하여 기본적으로 NaN으로 해석되는 목록을 만든 후 NaN이 아닌 것으로 해석되기를 원했던 NA를 코멘트 아웃합니다.이 접근 방식은 여전히 NA를 제외한 다른 값을 NaN으로 처리합니다.
na_values = ["",
"#N/A",
"#N/A N/A",
"#NA",
"-1.#IND",
"-1.#QNAN",
"-NaN",
"-nan",
"1.#IND",
"1.#QNAN",
"<NA>",
"N/A",
# "NA",
"NULL",
"NaN",
"n/a",
"nan",
"null"]
df1 = pd.read_csv('Test.csv',na_values=na_values,keep_default_na=False )
co1 col2 col3 col4
a b c d e
NaN NA NaN NA NaN
2 3 4 5 NaN
Anton Protopopov의 답변을 바탕으로 기본값을 최소화하는 깔끔한 방법(즉, NaN으로 구문 분석하지 않을 값을 제거하고 추가):
from pandas._libs.parsers import STR_NA_VALUES
accepted_na_values = STR_NA_VALUES - {'NA'} | {'_'}
path = 'myexcel.xlsx'
df = pd.read_excel(path, keep_default_na=False, na_values=accepted_na_values)
판다를 사용하여 파일을 읽는 동안 매개 변수를 사용할 수 있습니다.na_filter = False
또는keep_default_na=False
선에서
import pandas as pd
df = pd.read_csv('sample.tsv',sep='\t',encoding='utf-8',na_filter = False)
for df_tuples in df.itertuples(index=True):
print(df_tuples)
언급URL : https://stackoverflow.com/questions/33952142/prevent-pandas-from-interpreting-na-as-nan-in-a-string
'prosource' 카테고리의 다른 글
가장 단순한 Socket.io 의 예는 무엇입니까? (0) | 2023.07.27 |
---|---|
iCloud 기본 사항 및 코드 샘플 (0) | 2023.07.27 |
뷰에 구체화 뷰를 작성할 수 있습니까? (0) | 2023.07.22 |
함수에서 "항상 __sub__((항상_sub)"은 무엇을 의미합니까? (0) | 2023.07.22 |
JMS 메시지가 사용될 때까지 스프링 컨텍스트 유지 (0) | 2023.07.22 |