Python pandas 를 사용 하여 CSV 파일 을 읽 으 려 면 무엇 을 주의해 야 합 니까?
다음 내용 을 파일
people.csv
로 저장 합 니 다.
id, , , , , ,
1, ,m,1992-10-03, , ,
2, ,m,1995-02-12, , ,
3, , ,1998-03-25, , , ,
4, ,Female,2001-6-32,, ,
5, , ,1991-03-05, (nanjing), , -
모든 것 이 정상 이 라면 Jupyter Notebook 에 다음 과 같은 내용 을 표시 해 야 합 니 다.파일 인 코딩
파일 인 코딩 형식 은 가장 실수 하기 쉬 운 문제 중의 하나 이다.인 코딩 형식 이 정확 하지 않 으 면 파일 내용 을 전혀 읽 지 못 하고 다음 과 같은 오류 가 발생 하여 전혀 당황 합 니 다.
---------------------------------------------------------------------------
UnicodeDecodeError Traceback (most recent call last)
<ipython-input-6-8659adefcfa6> in <module>
----> 1 pd.read_csv('people.csv', encoding='gb2312')
C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py in parser_f(filepath_or_buffer, sep, delimiter, header, names, index_col, usecols, squeeze, prefix, mangle_dupe_cols, dtype, engine, converters, true_values, false_values, skipinitialspace, skiprows, skipfooter, nrows, na_values, keep_default_na, na_filter, verbose, skip_blank_lines, parse_dates, infer_datetime_format, keep_date_col, date_parser, dayfirst, cache_dates, iterator, chunksize, compression, thousands, decimal, lineterminator, quotechar, quoting, doublequote, escapechar, comment, encoding, dialect, error_bad_lines, warn_bad_lines, delim_whitespace, low_memory, memory_map, float_precision)
683 )
684
--> 685 return _read(filepath_or_buffer, kwds)
686
687 parser_f.__name__ = name
C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py in _read(filepath_or_buffer, kwds)
455
456 # Create the parser.
--> 457 parser = TextFileReader(fp_or_buf, **kwds)
458
459 if chunksize or iterator:
C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py in __init__(self, f, engine, **kwds)
893 self.options["has_index_names"] = kwds["has_index_names"]
894
--> 895 self._make_engine(self.engine)
896
897 def close(self):
C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py in _make_engine(self, engine)
1133 def _make_engine(self, engine="c"):
1134 if engine == "c":
-> 1135 self._engine = CParserWrapper(self.f, **self.options)
1136 else:
1137 if engine == "python":
C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\parsers.py in __init__(self, src, **kwds)
1915 kwds["usecols"] = self.usecols
1916
-> 1917 self._reader = parsers.TextReader(src, **kwds)
1918 self.unnamed_cols = self._reader.unnamed_cols
1919
pandas\_libs\parsers.pyx in pandas._libs.parsers.TextReader.__cinit__()
pandas\_libs\parsers.pyx in pandas._libs.parsers.TextReader._get_header()
UnicodeDecodeError: 'gb2312' codec can't decode byte 0x93 in position 2: illegal multibyte sequence
현재 중국어 에서 가장 많이 사용 되 는 것 은utf-8
와gb2312
두 가지 형식 으로 정확 한 인 코딩 만 지정 하면 됩 니 다.인 코딩 을 모 르 는 상태 에서 두 번 만 시도 하면 된다.padas 의 기본 파일 인 코딩 형식 은utf-8
입 니 다.따라서 이 오류 가 발생 하면encoding=gb2312
를 사용 하여 다시 시도 하면 됩 니 다.예 를 들 어pd.read_csv(file, encoding='gb2312')
.빈 값
빈 값 은 csv 에서 도 흔히 볼 수 있 습 니 다.예 를 들 어 다음 과 같은 내용 입 니 다.
import pandas as pd
df = pd.read_csv('people.csv')
v1=df[' '][3]
print(v1, type(v1))
출력:
nan <class 'float'>
이 를 통 해 알 수 있 듯 이 빈 값 도 데이터 형식 이 있 고float
형식 입 니 다.빈 값 을 어떻게 판단 하 는 지 는 두 가지 방법 이 있 습 니 다.
math.isnan(x)
를 사용 할 수도 있 고isinstance(float)
를 사용 할 수도 있 습 니 다.DateFrame 대상 은 Series 대상 을 포함 하고 하나의 Series 대상 에서 모든 데이터 형식 은 기본적으로 같 기 때문에 데이터 형식 이 문자열(str)로 추정 된다 면 math.isnan(x)을 직접 사용 하면 오류TypeError: must be real number, not str
오류 가 발생 합 니 다.즉,실수 로 문자열 이 아 닙 니 다.그래서 이 럴 때 우 리 는isinstance(x, flaot)
방법 을 사용 해 야 한다.구체 적 으로 이 예 시 를 보십시오.
df. =df. .map(lambda x: ' ' if isinstance(x, float) else x)
df
함수 매 핑
방법 1:labmda 표현 식 직접 사용
데이터 열 을 복잡 하 게 조작 해 야 할 때 우 리 는 아래 함 수 를 사용 할 때 해당 하 는 조작 을 할 수 있다.
df=df.fillna(' ')
df. =df. .map(lambda x: x.split(' ')[0].split('-')[0].split(',')[0])
df
방법 2:사용자 정의 함수 사용
맵 을 진행 할 때 조작 이 간단 하면 사전 방식 으로 수치 맵 을 진행 할 수 있 습 니 다(아래 참조).그러나 조작 이 복잡 하 다 면 함수 로 매 핑 을 해 야 한다.이 예제 를 보십시오.성별 을 읽 을 때 내용 은'm','M','Female'등 이 있 습 니 다.지금 은 모두
또는
로 전환 해 야 합 니 다.
def set_sex(s):
if s.lower() == 'm' or s.lower() == 'male':
return ' '
elif s.lower() == 'female':
return ' '
return s
df = pd.read_csv('people.csv', converters={' ': lambda x : set_sex(x)})
df
방법 3:수치 사전 맵 사용
데이터 처리 시 문자열 보다 수치 형 이 효율 적 이기 때문에 가능 한 한 데 이 터 를 문자열 로 변환 하고 싶 습 니 다.입력 한 데이터 의 성별 중 남성 을 1 여성 으로 0 으로 바 꾸 는 예 시 를 보십시오.동작 은 다음 과 같 습 니 다.
Python pandas 를 사용 하여 CSV 파일 을 읽 을 때 무엇 을 주의해 야 합 니까?이 글 은 여기까지 소개 되 었 습 니 다.더 많은 관련 pandas 가 CSV 파일 내용 을 읽 고 있 습 니 다.예전 의 글 을 검색 하거나 아래 의 관련 글 을 계속 찾 아 보 세 요.앞으로 많은 응원 부 탁 드 리 겠 습 니 다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
【Pandas】DatetimeIndex란? no.29안녕하세요, 마유미입니다. Pandas에 대한 기사를 시리즈로 작성하고 있습니다. 이번은 제29회의 기사가 됩니다. 에서 Pandas의 시간에 대한 모듈에 대해 씁니다. 이번 기사에서는, 「DatetimeIndex」...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.