[英]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.