gpt4 book ai didi

python - 将 pandas DataFrame 制作成 dict 和 dropna

转载 作者:太空狗 更新时间:2023-10-29 17:32:01 26 4
gpt4 key购买 nike

我有一些带有 NaN 的 pandas DataFrame。像这样:

import pandas as pd
import numpy as np
raw_data={'A':{1:2,2:3,3:4},'B':{1:np.nan,2:44,3:np.nan}}
data=pd.DataFrame(raw_data)
>>> data
A B
1 2 NaN
2 3 44
3 4 NaN

现在我想用它做一个字典,同时删除 NaN。结果应如下所示:

{'A': {1: 2, 2: 3, 3: 4}, 'B': {2: 44.0}}

但是使用 pandas to_dict 函数给我这样的结果:

>>> data.to_dict()
{'A': {1: 2, 2: 3, 3: 4}, 'B': {1: nan, 2: 44.0, 3: nan}}

那么如何从 DataFrame 中生成字典并去除 NaN 呢?

最佳答案

有很多方法可以实现这一点,我花了一些时间在不太大 (70k) 的数据帧上评估性能。尽管 @der_die_das_jojo 的回答是有效的,但它也很慢。

this question建议的答案实际上,在大型数据帧上速度提高了大约 5 倍。

在我的测试数据框 (df) 上:

以上方法:

%time [ v.dropna().to_dict() for k,v in df.iterrows() ]
CPU times: user 51.2 s, sys: 0 ns, total: 51.2 s
Wall time: 50.9 s

另一种慢速方法:

%time df.apply(lambda x: [x.dropna()], axis=1).to_dict(orient='rows')
CPU times: user 1min 8s, sys: 880 ms, total: 1min 8s
Wall time: 1min 8s

我能找到的最快方法:

%time [ {k:v for k,v in m.items() if pd.notnull(v)} for m in df.to_dict(orient='rows')]
CPU times: user 14.5 s, sys: 176 ms, total: 14.7 s
Wall time: 14.7 s

这个输出的格式是一个面向行的字典,如果你想要问题中的面向列的形式,你可能需要做一些调整。

如果有人能更快地找到这个问题的答案,我非常感兴趣。

关于python - 将 pandas DataFrame 制作成 dict 和 dropna,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26033301/

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