Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Pandas读取数据并跳过元数据_Python_Pandas_Metadata - Fatal编程技术网

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

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

背景

我的数据文件由两部分组成: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('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