将字典列表转换为单独的列熊猫

时间:2019-05-22 03:26:56

标签: python 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

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

3 个答案:

答案 0 :(得分:3)

您可以将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

答案 1 :(得分:0)

您可以使用pd.to_frame

test_data = {1: 'MLB', 2: 'NBA', 3: 'NFL'}
pd.Series(test_data).to_frame('sport').reset_index().rename(columns={'index':'Number'})


   Number sport
0       1   MLB
1       2   NBA
2       3   NFL

答案 2 :(得分:0)

您可以这样做:

ps = pd.Series(testData)
df = pd.DataFrame(ps).reset_index()
df.columns = ['Number', 'Sport']

除此之外,如果您不想使用第一个索引列,也可以这样做:

df.set_index('Number', inplace=True)

结果将是

Number    Sports      
1         MLB
2         NBA
3         NFL