使用 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
背景
我的数据文件由两部分组成:CSV 格式的数据和元数据。我可以使用此处给出的方法 1 and here
以下是数据文件的样本:
在这里,你可以看到我可以手动指定行号(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