我需要将熊猫数据框转换为 JSONL 格式。我找不到一个好的包来做它并尝试自己实现,但它看起来有点丑陋且效率不高。
例如,给定一个熊猫 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'}]
我考虑过转换“模式”列并包含嵌套的“下”?
UPD
到目前为止,我成功地将“模式”转换为列表:
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']}]
更新 2
最终,我设法得到了我想要的东西,但是以最非 Python 的方式。
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'}]}'
你有机会展示一个巧妙的解决方案吗?