Pandas格式化基于密钥的csv数据

时间:2016-11-29 17:07:02

标签: python json csv pandas dataframe

我有一个很大的csv文件(100万+行),其中包含

行的数据
s, p, o
4931958, type,          CNV
4931958, sample_id,     683665
4931958, primary_Site,  haematopoietic_and_lymphoid_tissue
4931958, site_subtype,  NS  

我的最终结果是将数据格式化为json,类似于

{
    "name": 4931958,
    "type": "CNV",
    "sample_id": "683665",
    "site_subtype":  "NS"
}  

我是使用常规python循环完成的,运行需要4个小时。我正在寻找蟒蛇熊猫来帮助解决这个问题。 我的问题在于,大熊猫文档似乎完全基于数学方程。 我目前在csv中阅读并使用groupby按上面的s组织我的数据,但是如何将其余列合并为我想要的格式。

我最初开始创建list dicts

lst = []
for row in df.itertuples():
    lst.append({"name": row[1], row[2]: row[3]})  

然后根据此列表创建一个新的数据框,但我遇到了合并数据帧行的相同问题。

1 个答案:

答案 0 :(得分:1)

尝试使用DataFrame.pivot()。

在“s”上进行透视和分组,成为新的索引:

 df_pivoted = df.pivot(index='s',columns='p', values='o')

将索引添加为新列:

 df_pivoted['name'] = df_pivoted.index

以“记录”格式输出为JSON:

 df_pivoted.to_json('output.json',orient='records')

JSON文件应如下所示:

[{"primary_Site":"haematopoietic_and_lymphoid_tissue","sample_id":"683665","site_subtype":"NS","type":"CNV","name":4931958}]