如何从 pandas DataFrame 中创建字典列表?

dat*_*tam 4 python dataframe python-3.x pandas

我想尝试建立一个包含特定词典的列表。我希望结构类似于以下内容:

\n\n
[{'label': 'Abdelnaby, Alaa', 'value': '76001'},\n{'label': 'Abdul-Aziz, Zaid', 'value': '76002'},\n{'label': 'Abdul-Jabbar, Kareem', 'value': '76003'}]\n
Run Code Online (Sandbox Code Playgroud)\n\n

目前,我从中提取的数据位于 pandas 数据框中。下面的例子...

\n\n
PlayerID    Name     Current Player First Season    Last Season\n76001   Abdelnaby, Alaa       0     1990            1994\n76002   Abdul-Aziz, Zaid      0     1968            1977\n76003   Abdul-Jabbar, Kareem  0     1969            1988\n51      Abdul-Rauf, Mahmoud   0     1990            2000\n1505    Abdul-Wahad, Tariq    0     1997            2003\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果这足够了,请告诉我\xe2\x80\x8b。非常感谢你的帮助!

\n

cs9*_*s95 5

选择您的列,重命名它们并调用to_dictorient='records'获取字典列表,

(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}]
Run Code Online (Sandbox Code Playgroud)

您可以通过更改为.to_dict('r')来输出 JSON .to_json(orient='records')


如果性能很重要,这里有一个带有列表理解构造的优化解决方案。

[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}]
Run Code Online (Sandbox Code Playgroud)