簡體   English   中英

pandas to dict: to_dict 不存儲所有值

[英]pandas to dict: to_dict does not store all values

我有一個 40000 行的 dataframe df

              0  bin
0      4.506840  4-5
1      4.506840  4-5
2      4.444245  4-5
3      4.485975  4-5
4      4.527705  4-5
...         ...  ...
39995  6.572475  6-7
39996  6.697665  6-7
39997  6.322095  6-7
39998  6.322095  6-7
39999  6.676800  6-7

它為“0”列中的每個數字存儲它所屬的區間(bin)。 我想通過以下方式將其轉換為字典:

dict(zip(df[0],df.bin))

得到一個 output 像:

{4.506840: '4-5', 4.506840: '4-5', 4.444245: '4-5, ... }

所以我想存儲'0'和它所屬的bin中的每個值。 不知何故,我的 dict 的長度為 340,而不是 40000,因此它不會存儲所有行。 我的問題是:為什么? 以及如何在字典中獲取所有 40000 行? 干杯!

也許您在該列中有多個相同的值,盡管 python 允許您存儲多個相同的值,但您不能存儲多個相同的鍵。 我建議您不要使用 dict 或嘗試在 df 中的每個重復項上放置一些標識符,然后再將其轉換為 dict 以將其與其他鍵區分開來。 另一種方法是划分重復項所在的 df 或將所有重復項存儲在一個列表中,盡管我不確定這是你想要的。

由於您在df[0]中存在重復項,並且由於您不能在 python 字典中復制相同的鍵,因此您可以執行以下操作:

result = {}
for i_0, i_bin in zip(df[0],df.bin):
    if i_0 not in result.keys():
        result[i_0] = []
    result[i_0].append(i_bin)

output:

{
    "4.506840": ["4-5", "4-5"],
    "4.444245": ["4-5"],
    ...
}

這取決於您想要實現的目標,但這是一種感知所有價值的方式。

編輯:

根據@anky 評論,您可以使用 pandas 聚合 function 來代替循環來執行相同的操作。 當然,它具有更好的性能:

df.groupby(0)['bin'].agg(list).to_dict()

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM