Pandas:如何指定起始行来提取数据

Jav*_*ava 3 python excel dataframe pandas

我正在使用 Pandas 库和 Python。

我有一个 Excel 文件,它在 Excel 工作表的顶部有一些标题信息,我不需要数据提取。

但是,标题信息可能需要更长的行,因此无法预测它可能需要多长时间。

所以,我的数据提取应该从它说“ID”的地方开始......对于这个特殊情况,它从第 5 行开始,但它可能会改变。

图像显示在底部(我在第 5 行之后变灰以获取敏感信息)。

我如何将其放入逻辑中(跳过标题并跳转到第 5 行)?模式应该是,行标题从“ID、EMP_ID”等开始。

在此处输入图片说明

with open('File.xls') as fp:
    skip = next(filter(
        lambda x: x.startswith('ID'),
        enumerate(fp)
    ))[0]

df = pd.read_excel('File.xls', usercols=['ID', 'EMP_ID'], skiprows=skip)
print df
Run Code Online (Sandbox Code Playgroud)

cs9*_*s95 11

您可以使用pd.read_csv并指定skiprows=4

df = pd.read_csv('test.csv', skiprows=4)
Run Code Online (Sandbox Code Playgroud)


a_g*_*est 7

您可以手动检查标题行,然后使用read_csvs 关键字参数skiprows

with open('data.csv') as fp:
    skip = next(filter(
        lambda x: x[1].startswith('ID'),
        enumerate(fp)
    ))[0]
Run Code Online (Sandbox Code Playgroud)

然后跳过行:

df = pandas.read_csv('data.csv', skiprows=skip)
Run Code Online (Sandbox Code Playgroud)

像这样,您可以支持任意长度的预标题部分。


对于 Python 2:

import itertools as it

with open('data.csv') as fp:
    skip = next(it.ifilter(
        lambda x: x[1].startswith('ID'),
        enumerate(fp)
    ))[0]
Run Code Online (Sandbox Code Playgroud)