gpt4 book ai didi

python - Pandas ,规范化 json-per-line

转载 作者:行者123 更新时间:2023-12-03 18:44:42 25 4
gpt4 key购买 nike

Pandas 有 pandas.io.json.json_normalize可以扁平化json的方法。

我有一个包含 json-per-line 数据的源文件(通过长时间运行的进程流式传输到文件)。我真的无法修改写入该文件的内容。这是一个人为的 JSON 示例:
{"type": "bar", "aspect": {"Positive": 1, "Negative": 0.6}}
{"type": "bar", "aspect": {"Positive": 0.6, "Negative": 1.5}}

我可以使用普通的 pandas.read_json 阅读它方法通过传递 lines=True范围。但是我希望它被扁平化,就像通过 json_normalize 一样,因为这使它成为一个非常有用的形式,例如
>>> json_normalize(json.loads('{"type": "bar", "aspect": {"Positive": 1, "Negative": 0.6}}'))
aspect.Negative aspect.Positive type
0 0.6 1 bar

如果我循环遍历源代码、规范化和附加,这将导致我添加的每一行都有一个完整的副本。这真的会损害性能。

最佳答案

您可以使用 read_json + DataFrame constructor + add_prefix + drop + join :

df = pd.read_json('file.json', lines = True)
print (df)
aspect type
0 {'Negative': 0.6000000000000001, 'Positive': 1} bar
1 {'Negative': 1.5, 'Positive': 0.6000000000000001} bar

df = (pd.DataFrame(df['aspect'].values.tolist())
.add_prefix('aspect.')
.join(df.drop('aspect', 1)))
print (df)
aspect.Negative aspect.Positive type
0 0.6 1.0 bar
1 1.5 0.6 bar

或者为每一行调用 json.loads和上次使用 json_normalize :
df = json_normalize(pd.Series(open('file.json').readlines()).apply(json.loads))
print (df)
aspect.Negative aspect.Positive type
0 0.6 1.0 bar
1 1.5 0.6 bar
df = json_normalize([json.loads(x) for x in open('file.json').readlines()])
print (df)

aspect.Negative aspect.Positive type
0 0.6 1.0 bar
1 1.5 0.6 bar

计时 在 5k 行中:
In [13]: %timeit json_normalize([json.loads(x) for x in open('file.json').readlines()])
10 loops, best of 3: 112 ms per loop

In [14]: %timeit json_normalize(pd.Series(open('file.json').readlines()).apply(json.loads))
10 loops, best of 3: 117 ms per loop

In [15]: %%timeit
...: df = pd.read_json('file.json', lines = True)
...: df = (pd.DataFrame(df['aspect'].values.tolist()).add_prefix('aspect.').join(df.drop('aspect', 1)))
...:
10 loops, best of 3: 30.1 ms per loop

关于python - Pandas ,规范化 json-per-line,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46481764/

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