gpt4 book ai didi

python - 优化 pandas dataframe 到 json 的成本

转载 作者:太空宇宙 更新时间:2023-11-04 04:34:33 25 4
gpt4 key购买 nike

我的目标是按 1 列对数据框进行排序,并尽可能高效地返回一个 json 对象。

为了复制,请定义以下数据框:

import pandas as pd
import numpy as np
test = pd.DataFrame(data={'a':[np.random.randint(0,100) for i in range(10000)], 'b':[i + np.random.randint(0,100) for i in range(10000)]})

a b
0 74 89
1 55 52
2 53 39
3 26 21
4 69 34

我需要做的是按 a 列排序,然后将输出编码为 json 对象。我正在采用基本方法并执行以下操作:

test.sort_values('a', ascending=True, inplace=True) # n log n
data = [{}] # 1
for d in test.itertuples(): # n times
to_append = {'id': d.Index, 'data': {'a': d.a, 'b': d.b}} # 3
data.append(to_append) # 1

那么成本是nlogn + n*4?有没有更有效的方法呢?

最佳答案

我注意到 pandas 读取和写入 JSON 的速度比纯 python 慢。如果您确定只有两列,您可以这样做:

data = [{'id' : x, 'data' : {'a' : y, 'b' : z}} 
for x, (y, z) in zip(test.index, test.values.tolist())]
json.dumps(data)

如果你有更多的列需要担心,你可以这样做:

c = test.columns
data = [{'id' : x, 'data' : dict(zip(c, y))}
for x, *y in zip(test.index, test.values.tolist())]
json.dumps(data)

或者,如果您可以处理它,请在保存前调用 reset_index:

c = test.columns
data = [{'id' : x[0], 'data' : dict(zip(c, x[1:]))}
for x in test.reset_index().values.tolist()]
json.dumps(data)

关于python - 优化 pandas dataframe 到 json 的成本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52029128/

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