我有一个很大的 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 个小时。我正在研究 python pandas 来帮助解决这个问题。
我的问题是 pandas 文档似乎完全基于数学方程。
我目前正在阅读 csv 并使用 groupby
按上面的 s
组织我的数据,但是如何将剩余的列合并为我想要的格式。
我最初是创建一个 dicts
的 list
lst = []
for row in df.itertuples():
lst.append({"name": row[1], row[2]: row[3]})
然后根据此列表创建一个新的数据框,但我遇到了合并数据框的行的相同问题。
最佳答案
尝试 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}]
关于python - Pandas 基于 key 格式化 csv 数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40871679/