如何从pandas DataFrame中制作字典列表?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何从pandas DataFrame中制作字典列表?相关的知识,希望对你有一定的参考价值。
我希望尝试设置一个包含特定字典的列表。我希望结构类似于以下内容:
[{'label': 'Abdelnaby, Alaa', 'value': '76001'},
{'label': 'Abdul-Aziz, Zaid', 'value': '76002'},
{'label': 'Abdul-Jabbar, Kareem', 'value': '76003'}]
目前,我提取的数据是在熊猫数据框中。以下示例......
PlayerID Name Current Player First Season Last Season
76001 Abdelnaby, Alaa 0 1990 1994
76002 Abdul-Aziz, Zaid 0 1968 1977
76003 Abdul-Jabbar, Kareem 0 1969 1988
51 Abdul-Rauf, Mahmoud 0 1990 2000
1505 Abdul-Wahad, Tariq 0 1997 2003
如果这足够,请告诉我。非常感谢你的帮助!
选择你的列,重命名它们并用to_dict
调用orient='records'
以获得一个dicts列表,
(df.reindex(['Name', 'PlayerID'], axis=1)
.set_axis(['label', 'value'], axis=1, inplace=False)
.to_dict('r'))
# [{'label': 'Abdelnaby, Alaa', 'value': 76001},
# {'label': 'Abdul-Aziz, Zaid', 'value': 76002},
# {'label': 'Abdul-Jabbar, Kareem', 'value': 76003},
# {'label': 'Abdul-Rauf, Mahmoud', 'value': 51},
# {'label': 'Abdul-Wahad, Tariq', 'value': 1505}]
您可以通过将.to_dict('r')
更改为.to_json(orient='records')
来输出JSON。
如果性能很重要,这里有一个带有列表理解构造的优化解决方案。
[dict(zip(('label', 'value'), r)) for r in df[['Name', 'PlayerID']].values]
# [{'label': 'Abdelnaby, Alaa', 'value': 76001},
# {'label': 'Abdul-Aziz, Zaid', 'value': 76002},
# {'label': 'Abdul-Jabbar, Kareem', 'value': 76003},
# {'label': 'Abdul-Rauf, Mahmoud', 'value': 51},
# {'label': 'Abdul-Wahad, Tariq', 'value': 1505}]
如果速度是问题,我们可以使用dict comp:
myjson = [{'label': name, 'value': pid} for pid,name in zip(df['PlayerID'], df['Name'])]
得到:
[{'label': 'Abdelnaby, Alaa', 'value': 76001},
{'label': 'Abdul-Aziz, Zaid', 'value': 76002},
{'label': 'Abdul-Jabbar, Kareem', 'value': 76003},
{'label': 'Abdul-Rauf, Mahmoud', 'value': 51},
{'label': 'Abdul-Wahad, Tariq', 'value': 1505}]
此外,如果要将数据写为json:
import json
with open('myjson.json','w') as fo:
json.dump(myjson,fo,indent=4)
Speed comparison
%%timeit
myjson = [{'label': name, 'value': pid} for pid,name in zip(df['PlayerID'].values, df['Name'].values)]
5.9 µs ± 125 ns per loop (mean ± std. dev. of 7 runs, 100000 loops each)
%%timeit
myjson = (df.reindex(['Name', 'PlayerID'], axis=1)
.set_axis(['label', 'value'], axis=1, inplace=False)
.to_dict('record')
)
756 µs ± 24.5 µs per loop (mean ± std. dev. of 7 runs, 1000 loops each)
玩家ID名称当前玩家第一季最后一季76001 Abdelnaby,Alaa 0 1990 1994 76002 Abdul-Aziz,Zaid 0 1968 1977 76003 Abdul-Jabbar,Kareem 0 1969 1988 51 Abdul-Rauf,Mahmoud 0 1990 2000 1505 Abdul-Wahad,Tariq 0 1997 2003
#You already have a data frame
dataframe="your data frame"
#us iloc
values=dataframe.iloc[:,0]# u have all rows n 0th col
label=dataframe.iloc[:,1] #u have all rows n 1st col
dic={}
for i,val in values:
dic[val]=lable[i]
#hope the logic is clear.
以上是关于如何从pandas DataFrame中制作字典列表?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Pandas 从 DataFrame 或 np.array 中的列条目创建字典
如何使用 python 或 pandas 根据包含字典列表的列过滤 DataFrame?
如何使用字典键和值重命名 pandas DataFrame 中的列?
尝试从 Pandas DataFrame 中的字典访问第一个值时出现浮点错误