[英]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.