Pandas:在读取管道分隔的文件时捕获警告消息



我正在从文本文件中读取管道分隔的数据。有一些解析问题,我在处理pd.read_csv(error_bad_lines=False)时也遇到了同样的问题

files = [f for f in filepath for f in os.listdir(filepath)]
df_f=[]
for i in files:
df = df = pd.read_csv(i,usecols=col_lst,sep='|',engine='python',encoding='iso-8859-1',error_bad_lines=False)
df_f.append(df)

上面的方法是删除由于|解析问题而导致的坏行并继续。

目标:我可以获得上面示例中错误行的警告消息列表并创建相同的列表吗。

例如。

df_f =[]
bad_line =[]
for i in files:
df = df = pd.read_csv(i,usecols=col_lst,sep='|',engine='python',encoding='iso-8859-1',error_bad_lines=False)
#Pseudo Code Below. Need assistance in building it correctly
if bad_lines:
bad_line.append(bad_lines)
df_f.append(df)

换句话说,我如何将警告消息附加到bad_line列表中。

对此有任何想法都将不胜感激。

在将错误重定向到日志文件时执行同样的操作。基本上,我用pathlib替换了os,因为它更可读。我把warning_bad_lines变成了真的,就这样。

from pathlib import Path
import contextlib
import pandas as pd
# variables replace with real ones
CSVS_DIR = './data'
LOG_DIR = './logs'
COL_LIST = ['your_list', '...'] 
# create log dir if not exist
Path(LOG_DIR).mkdir(parents=True, exist_ok=True)
# direct warning to log.txt
with open(f'{LOG_DIR}log.txt', 'w') as f:
with contextlib.redirect_stderr(f):
dfs_list = [pd.read_csv(csv_file, usecols=COL_LIST,sep='|',engine='python',encoding='iso-8859-1',error_bad_lines=False, warn_bad_lines=True, ) for csv_file in Path(CSVS_DIR).glob('*.csv')]
df_master = pd.concat(dfs_list)

如果我们不想要日志文件,我们可以使用warning

import warnings
from pathlib import Path
import pandas as pd
# variables replace with real ones
CSVS_DIR = './data'
COL_LIST = ['your_list', '...'] 
# direct warning to variable:
with warnings.catch_warnings(record=True) as w:
dfs_list = [pd.read_csv(csv_file, usecols=COL_LIST,sep='|',engine='python',encoding='iso-8859-1',error_bad_lines=False, warn_bad_lines=True, ) for csv_file in Path(CSVS_DIR).glob('*.csv')]
df_master = pd.concat(dfs_list)
df_bad_lines_list = [str(bad.message) for bad in w]

最新更新