使用 Pandas 读取数据并跳过元数据

Using Pandas to read data and skip metadata

背景

我的数据文件由两部分组成:CSV 格式的数据和元数据。我可以使用此处给出的方法 1 and here 通过指定元数据开头的 location/line 编号来手动跳过元数据部分。

以下是数据文件的样本:

在这里,你可以看到我可以手动指定行号(420)并使用以下代码跳过元数据:

with open('data.csv', 'r') as f:
    metadata_location = [i for i, x in enumerate(f.readlines()) if 'Metadata' in x]
with open('data.csv', 'r') as f:
    flat_data = pd.read_csv(f, index_col=False, skiprows=lambda x: x >= metadata_location[0])

with open('data.csv') as f:
    df = pd.read_csv(f, index_col=False)
df = df[:420]

问题

如何扫描文件以捕获元数据然后跳过读取? (我需要处理多个这样的文件,因此,我想写这样的代码)

你的问题不清楚。 如果我没看错,您正在寻找一种方法来扫描所有行并 运行 上面的代码?

编辑 1:

for index, row in All_Patients_Chosen_Visit.iterrows(): df = row[:420]

见上面的代码。检查是否有效

IIUC,您可以将可调用函数传递给 skiprows 参数,该参数将针对行索引进行评估,如果应跳过该行则返回 True,否则返回 False。使用:

df = pd.read_csv("data.csv", index_col=False, skiprows=lambda x: x >= 420)

更新:查找元数据位置:

import re

md_loc = 0
with open("data.csv") as f:
    for idx, line in enumerate(f):
        if re.search(r'^"Metadata:\s*"$', line):
            md_loc = idx