반응형
목차
파이썬 판다스로 CSV 파일 읽기 문제 발생
이번 포스트는 어떤 프로그램을 통해서 데이터를 저장하였고 저장은 csv file로 하였습니다. 데이터 분석을 위해 pandas dataframe을 사용하려고 하는데 csv 를 불러 오는 과정에서 에러가 발생하였습니다.
해결 방법에는 2가지가 있는데 아래에서 소개하겠습니다.(CSV file to dataframe/series))
우선 아래 예제 코드 처럼 pandas의 read_csv 함수를 사용해서 동일 폴더 안에 있는 csv file을 읽는 코드를 작성했습니다.
예제 코드>>
import pandas as pd
data = pd.read_csv('Driving_data_long.csv')
print(data)
에러 코드>>
Traceback (most recent call last):
File "d:\py_test\test00\test03.py", line 3, in <module>
data = pd.read_csv('Driving_data_long.csv')
File "C:\Users\forgo\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\util\_decorators.py", line 311, in wrapper
return func(*args, **kwargs)
File "C:\Users\forgo\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\io\parsers\readers.py", line 680, in read_csv
return _read(filepath_or_buffer, kwds)
File "C:\Users\forgo\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\io\parsers\readers.py", line 581, in _read
return parser.read(nrows)
File "C:\Users\forgo\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\io\parsers\readers.py", line 1250, in read
index, columns, col_dict = self._engine.read(nrows)
File "C:\Users\forgo\AppData\Local\Programs\Python\Python310\lib\site-packages\pandas\io\parsers\c_parser_wrapper.py", line 225, in read
chunks = self._reader.read_low_memory(nrows)
File "pandas\_libs\parsers.pyx", line 805, in pandas._libs.parsers.TextReader.read_low_memory
File "pandas\_libs\parsers.pyx", line 861, in pandas._libs.parsers.TextReader._read_rows
File "pandas\_libs\parsers.pyx", line 847, in pandas._libs.parsers.TextReader._tokenize_rows
File "pandas\_libs\parsers.pyx", line 1960, in pandas._libs.parsers.raise_parser_error
pandas.errors.ParserError: Error tokenizing data. C error: Expected 1 fields in line 3, saw 4
일반적인 csv 파일은 읽는데 문제가 발생하지 않았지만 이번 csv 파일에서 문제가 발생한 것은 에러 코드에서 확인할 수 있듯이 parser 에서 문제가 발생하였습니다.
csv 파일에서 encoding에서 발생한 문제로 보입니다.
파이썬 판다스로 CSV 파일 읽기 해결 방법 #1
첫번째 해결 방법은 read_csv 함수에 rb라는 인자를 아래와 같이 넣습니다. rb 는 읽기 모드를 binary로 한다는 뜻입니다.
예제 코드>>
import pandas as pd
data = pd.read_csv('Driving_data_long.csv', "rb")
print(data)
결과>>
sys:1: FutureWarning: In a future version of pandas all arguments of read_csv except for the argument 'filepath_or_buffer' will be keyword-only.
d:\py_test\test00\test03.py:3: ParserWarning: Falling back to the 'python' engine because the 'c' engine does not support regex separators (separators > 1 char and different from '\s+' are interpreted as regex); you can avoid this warning by specifying engine='python'.
data = pd.read_csv('Driving_data_long.csv', "rb")
#HEADER
0 #TITLES
1 ,,GPS@speed_kmh.RN_1,GPS@speed_kmh.RN_1
2 #UNITS
3 ,,km/h,m/s2
4 #DATATYPES
... ...
81091 81085,81084.000,29.68,-1.718
81092 81086,81085.000,22.17,-1.656
81093 81087,81086.000,15.15,-1.612
81094 81088,81087.000,10.36,-1.613
81095 81089,81088.000,7.519,-1.605
[81096 rows x 1 columns]
하나의 열에 값이 다 들어갔기 때문에 결과 값을 dataframe에서 다시 처리해줘야 합니다.
파이썬 판다스로 CSV 파일 읽기 해결 방법 #2
다음은 csv 라이브러리로 읽는 방법입니다.
예제 코드>>
import csv
with open('Driving_data_long.csv', newline='') as csvfile:
spamreader = csv.reader(csvfile, delimiter=' ', quotechar='|')
for row in spamreader:
print(', '.join(row))
결과>>
7802,7801.000,17.41,-0.2558
7803,7802.000,16.52,-0.2148
7804,7803.000,15.9,-0.1709
7805,7804.000,15.6,-0.1243
7806,7805.000,15.48,-0.07514
7807,7806.000,15.49,-0.0214
결과가 정상적으로 출력 되었습니다. 해당 파일은 , 로 분류해서 np.arrary에 넣어서 dataframe으로 옮겨야 합니다.
반응형
'파이썬(Python) > pandas' 카테고리의 다른 글
[Python]엑셀의 동일한 값 몇 개 인지 카운트 Pandas에서 쉽게 처리하기(판다스, 숫자, 텍스트, 중복 삭제) (0) | 2022.12.21 |
---|---|
[Python]Pandas 인덱스, 행/열 이름 List로 출력하기(Index, Value, Name) (0) | 2022.03.11 |
[Python]Pandas Dataframe 데이터 불러오기, loc, iloc 차이, 필터(Filter) 처리 (0) | 2022.02.26 |
[Python] Pandas dataframe 중복 (동일)값 찾고 삭제하는 방법 (0) | 2022.02.25 |
[Python] Pandas 여러가지 정렬방법(Multi Column, Index 제외 정렬 등) (0) | 2022.02.24 |