[英]Pandas skipping lines when in read_csv, can I record these to variable/log file
我在這里看到了類似的問題,但沒有什么是我想做的。
我正在使用 tsv/csv 文件讀取
try:
dataframe = pd.read_csv(
filepath_or_buffer=filename_or_obj,
sep='\t',
encoding='utf-8',
skip_blank_lines=True,
error_bad_lines=False,
warn_bad_lines=True,
dtype=data_type_dict,
engine='python',
quoting=csv.QUOTE_NONE
)
except UnicodeDecodeError:
dataframe = pd.read_csv(
filepath_or_buffer=exception_filename_or_obj,
sep='\t',
encoding='latin-1',
skip_blank_lines=True,
error_bad_lines=False,
warn_bad_lines=True,
dtype=data_type_dict,
engine='python',
quoting=csv.QUOTE_NONE
)
我在文件中明確定義了標題,但有時我看到文件有意外的附加列,並在控制台中收到以下消息
Skipping line 251643: Expected 20 fields in line 251643, saw 21
這對我的過程很好,我只想知道一種方法可以將這些消息或行記錄到 dataframe 或日志文件中,以便我知道哪些行已被跳過。 由於任何人都可以提交文件並且這是格式問題,我對修復消息不感興趣,只是記錄失敗的行號
提前非常感謝:)
編輯:包括 try except 子句
為了重現該問題,我使用了以下 CSV 文件( dummy.csv ):
F1,F2,F3
11,A,10.54
18,B,0.12,low
24,A,19.00
10,C,7.01,low
22,D,39.11,high
49,E,12.12
可能會注意到某些行有額外的字段。
由於我們使用的是error_bad_lines=False
,因此不會引發錯誤/異常,因此try-except
不是前進的道路。 我們需要重定向stderr
:
from contextlib import redirect_stderr
import pandas as pd
# import io
with open('error_messages.log', 'w') as h:
# f = io.StringIO()
# with redirect_stderr(f):
with redirect_stderr(h):
df = pd.read_csv(filepath_or_buffer='dummy.csv',
sep=',', # change it for your data
encoding='latin-1',
skip_blank_lines=True,
error_bad_lines=False,
# dtype=data_type_dict,
engine='python',
# quoting=csv.QUOTE_NONE
)
# h.write(f.getvalue()) # Write the error messages to log file
print(df)
上面的代碼會將消息寫入日志文件!
這是來自日志文件的示例 output:
Skipping line 3: Expected 3 fields in line 3, saw 4
Skipping line 5: Expected 3 fields in line 5, saw 4
Skipping line 6: Expected 3 fields in line 6, saw 4
更新
根據建議修改了代碼(在下面的評論中)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.