我正在尝试读取一个非常大的固定宽度格式文件并逐段处理。
然而,我似乎无法做到这一点。
这个小小的罪犯再现了这个问题。它尝试将具有四行的类似文件读入两个数据帧,每个数据帧分别为两行:
import pandas as pd
try: from cStringIO import StringIO # for Python2
except ImportError: from io import StringIO # for Python3
content = '''\
Foo Bar Baz
_____ ___ ____
1.0 2 A
3.0 4 B
7.0 6 C
10.0 8 D
'''
widths = [len(s) + 1 for s in content.split('\n')[1].split()]
widths[-1] -= 1
df01 = pd.read_fwf(StringIO(content),
widths=widths,
header=0,
skiprows=[1],
nrows=2)
df23 = pd.read_fwf(StringIO(content),
widths=widths,
header=0,
skiprows=lambda r: 1 <= r <= 3,
nrows=2)
这会导致以下错误(跟踪消除):
TypeError: 'function' object is not iterable
在这种情况下,我显然可以用列表[1, 2, 3]
替换lambda,但是当我试图跳过1-1,999,999和3,000,000-11,000,000行时,这是不切实际的。
这是pandas read_fwf
中的错误吗?文档中的错误?
有什么建议可以更好地完成这项任务吗?