Python 使用Pandas读取数据并跳过元数据
背景 我的数据文件由两部分组成:CSV格式的数据和元数据。我可以使用此处和此处给出的方法,通过指定元数据开头的位置/行号手动跳过元数据部分 以下是数据文件的示例: 在这里,您可以看到我可以手动指定行号(420),并使用以下代码跳过元数据:Python 使用Pandas读取数据并跳过元数据,python,pandas,metadata,Python,Pandas,Metadata,背景 我的数据文件由两部分组成:CSV格式的数据和元数据。我可以使用此处和此处给出的方法,通过指定元数据开头的位置/行号手动跳过元数据部分 以下是数据文件的示例: 在这里,您可以看到我可以手动指定行号(420),并使用以下代码跳过元数据: with open('data.csv', 'r') as f: metadata_location = [i for i, x in enumerate(f.readlines()) if 'Metadata' in x] with open('d
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:
对于索引,在所选的所有患者中的行中进行访问。iterrows():
df=行[:420]
参见上面的代码。检查它是否工作IIUC,您可以将可调用函数传递给将根据行索引计算的
skiprows
参数,如果应跳过行,则返回True,否则返回False。使用:
df = pd.read_csv("data.csv", index_col=False, skiprows=lambda x: x >= 420)
更新:要查找元数据位置,请执行以下操作:
谢谢你的评论。我改变了这个问题来解决它。是的,如果可能的话,我也希望使用Pandas提供的工具(我很清楚如何通过将文件读取为文本并识别元数据的位置来实现它)。请参见上面的Edit1我找到了一个解决方案,不是很优雅,而是一个简单的readlines()可用于查找元数据的位置,然后使用您的建议跳过阅读。我修改了代码以反映这些更改。我不知道在这种情况下遵循的协议。我应该如何改变这个问题?如果你能帮助编辑这个问题,那就太好了。非常感谢。
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