gpt4 book ai didi

python - Pandas 数据框到 JSONL(JSON 行)的转换

转载 作者:太空宇宙 更新时间:2023-11-03 15:42:31 25 4
gpt4 key购买 nike

我需要将 pandas 数据框转换为 JSONL 格式。我找不到一个好的包来做它并尝试自己实现,但它看起来有点丑而且效率不高。

例如,给定一个 pandas df:

        label      pattern
0 DRUG aspirin
1 DRUG trazodone
2 DRUG citalopram

我需要转换成以下形式的txt文件:

{"label":"DRUG","pattern":[{"lower":"aspirin"}]}
{"label":"DRUG","pattern":[{"lower":"trazodone"}]}
{"label":"DRUG","pattern":[{"lower":"citalopram"}]}

我尝试使用 to_dict('records'),但我缺少 [ ] 和嵌套的“较低”键。

df.to_dict('record')

创建:

[{'label': 'DRUG', 'pattern': 'aspirin'},
{'label': 'DRUG', 'pattern': 'trazodone'},
{'label': 'DRUG', 'pattern': 'citalopram'}]

我考虑过转换“pattern”列并包含嵌套的“lower”吗?

UPD

到目前为止,我已经成功地将'pattern'转换为列表:

df_new = pd.concat((df[['label']], df[['pattern']].apply(lambda x: x.tolist(), axis=1)), axis=1)
df_new.columns = ['label', 'pattern']
df_new.head()

结果:

    label   pattern
0 DRUG [aspirin]
1 DRUG [trazodone]
2 DRUG [citalopram]

然后:

df_new.to_dict(orient='records')

[{'label': 'DRUG', 'pattern': ['aspirin']},
{'label': 'DRUG', 'pattern': ['trazodone']},
{'label': 'DRUG', 'pattern': ['citalopram']}]

UPD 2

最终,我设法得到了我想要的东西,但是是以最非 pythonic 的方式。

df_1 = pd.DataFrame(df[['pattern']].apply(lambda x: {'lower': x[0]}, axis=1))
df_1.columns = ['pattern']

df_fin = pd.concat((df[['label']], df_1[['pattern']].apply(lambda x: x.tolist(), axis=1)), axis=1)
df_fin.columns = ['label', 'pattern']
df_fin.to_json(orient='records')

'{'label': 'DRUG', 'pattern': [{'lower': 'aspirin'}]}
{'label': 'DRUG', 'pattern': [{'lower': 'trazodone'}]}
{'label': 'DRUG', 'pattern': [{'lower': 'citalopram'}]}'

您有机会展示一个巧妙的解决方案吗?

最佳答案

在 Pandas > 0.19.0 版本中,DataFrame.to_json有一个参数,lines,它将写出 JSONL 格式。

鉴于此,您的解决方案的更简洁版本可能如下所示:

import pandas as pd

data = [{'label': 'DRUG', 'pattern': 'aspirin'},
{'label': 'DRUG', 'pattern': 'trazodone'},
{'label': 'DRUG', 'pattern': 'citalopram'}]
df = pd.DataFrame(data)

# Wrap pattern column in a dictionary
df["pattern"] = df.pattern.apply(lambda x: {"lower": x})

# Output in JSONL format
print(df.to_json(orient='records', lines=True))

输出:

{"label":"DRUG","pattern":{"lower":"aspirin"}}
{"label":"DRUG","pattern":{"lower":"trazodone"}}
{"label":"DRUG","pattern":{"lower":"citalopram"}}

关于python - Pandas 数据框到 JSONL(JSON 行)的转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51775175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com