在Pandas中有没有办法捕获通过设置error_bad_lines = False和warn_bad_lines = True产生的警告?例如以下脚本:
import pandas as pd
from StringIO import StringIO
data = StringIO("""a,b,c
1,2,3
4,5,6
6,7,8,9
1,2,5
3,4,5""")
pd.read_csv(data, warn_bad_lines=True, error_bad_lines=False)
Run Code Online (Sandbox Code Playgroud)
产生警告:
Skipping line 4: expected 3 fields, saw 4
Run Code Online (Sandbox Code Playgroud)
我想将此输出存储到字符串中,以便最终将其写入日志文件以跟踪正在跳过的记录.
我尝试使用警告模块,但似乎没有这种"警告"具有传统意义.我使用的是Python 2.7和Pandas 0.16.
任何帮助将不胜感激.
我有一个相当大的固定宽度文件(~30M 行,4gb),当我尝试使用 pandas read_fwf() 创建一个 DataFrame 时,它只加载了文件的一部分,并且很好奇是否有人遇到过类似的问题此解析器不读取文件的全部内容。
import pandas as pd
file_name = r"C:\....\file.txt"
fwidths = [3,7,9,11,51,51]
df = read_fwf(file_name, widths = fwidths, names = [col0, col1, col2, col3, col4, col5])
print df.shape #<30M
Run Code Online (Sandbox Code Playgroud)
如果我天真地使用 read_csv() 将文件读入 1 列,则所有文件都将被读取到内存中,并且不会丢失数据。
import pandas as pd
file_name = r"C:\....\file.txt"
df = read_csv(file_name, delimiter = "|", names = [col0]) #arbitrary delimiter (the file doesn't include pipes)
print df.shape #~30M
Run Code Online (Sandbox Code Playgroud)
当然,如果没有看到文件的内容或格式,它可能与我的事情有关,但想看看过去是否有人遇到过任何问题。我做了一个健全性检查并测试了文件深处的几行,它们似乎都被正确格式化(当我能够使用相同的规范将其拉入带有 Talend 的 Oracle DB 时进一步验证)。
如果有人有任何想法,请告诉我,通过 Python 运行所有内容而不是在我开始开发分析时来回走动会很棒。