首页 > 解决方案 > 将字典列表转换为单独的列 pandas

问题描述

我想要一个包含 1 列字典列表的 df

示例 df:

testData
{1: MLB, 2: NBA, 3: NFL}

进入以下:

Number   Sport
1        MLB
2        NBA
3        NFL

我尝试了以下方法:

pd.DataFrame(df['testData'].values.tolist())

但这会返回

MLB NBA NFL
1   2   3

我想我已经很接近了,但只需要一些关于如何正确转换我的数据框的帮助。

标签: pythonpandas

解决方案


您可以将 apply 与 pd.Series 构造函数一起使用:

In [11]: df
Out[11]:
                         testData
0  {1: 'MLB', 2: 'NBA', 3: 'NFL'}

In [12]: df["testData"].apply(pd.Series)
Out[12]:
     1    2    3
0  MLB  NBA  NFL

In [13]: df["testData"].apply(lambda d: pd.Series(list(d), d.values()))
Out[13]:
   MLB  NBA  NFL
0    1    2    3

要将这些纳入单个运动专栏,您可以stack

In [14]: df["testData"].apply(lambda d: pd.Series(list(d), d.values())).stack()
Out[14]:
0  MLB    1
   NBA    2
   NFL    3
dtype: int64

In [15]: res = df["testData"].apply(lambda d: pd.Series(list(d), d.values())).stack().reset_index(level=1)

In [16]: res.columns = ["sport", "number"]

In [17]: res
Out[17]:
  sport  number
0   MLB       1
0   NBA       2
0   NFL       3

推荐阅读