假设我有一个大的文本文件,格式如下
[Surname: "Gordon"]
[Name: "James"]
[Age: "13"]
[Weight: "46"]
[Height: "12"]
[Quote: "I want to be a pilot"]
[Name: "Monica"]
[Weight: "33"]
[Quote: "I am looking forward to christmas"]
一共有8把钥匙,总是按照我事先知道的“姓氏”、“姓名”、“年龄”、“体重”、“身高”、“学校”、“兄弟姐妹”、“引号”的顺序排列。如您所见,有些概要文件没有完整的变量集。你唯一能确定的就是名字。你知道吗
我想创建一个pandas数据帧,每个观察值作为一行,每列作为一个键。以詹姆斯为例,由于他没有“School”和“Sibling”中的条目,我希望这些单元格的条目是numpy nan对象。你知道吗
我的尝试是对每个变量使用类似(?:\[Surname: \"()\"\])
的东西。但即使是一个姓,我也遇到了问题。如果姓氏不存在,则只返回空列表,不返回占位符。你知道吗
更新:
举个例子,我希望莫妮卡的个人资料 ('','莫妮卡','','','','','',''我期待圣诞节')
您可以分析文件数据,对结果进行分组,并传递到数据帧:
输出:
你可以重写你的数据文件。代码将原始文件解析为类D,然后使用csv.DictWriter文件要将其写入熊猫可读的常规样式csv,请执行以下操作:
创建演示文件:
Itermediate类:
解析和重写:
检查所写内容:
输出:
基于@WiktorStribiżew comment,您可以使用groupby(来自itertools)将行分组为空行和数据行,例如:
输出
注意:这将创建一个字典,其中键是字段名,值是每个字段的值,此格式与您的预期输出不匹配,但我相信比您要求的更完整。在任何情况下,您都可以轻松地将此格式转换为所需的元组格式。你知道吗
解释
itertools的groupby函数将输入数据分组为空行和记录行的连续组。然后您只需要处理不为空的组。对于每一行,处理都很简单如果模式是匹配的,则尝试匹配一个模式,假设每一行对于每个匹配都是独占的,则利用命名组用字段的值更新
record
字典。你知道吗相关问题 更多 >
编程相关推荐