Python 将词典列表转换为单独的列

Python 将词典列表转换为单独的列,python,pandas,Python,Pandas,我想要一个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 我想我已经很接近了,但我需要一些关于如何正确转换数据帧的帮助。您可以将apply与pd.S

我想要一个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

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

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

要将这些内容放到一个体育专栏中,您可以
堆叠

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

您可以使用
pd.to\u 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
您可以这样做:

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

这里是一个开始:
pd.Series(testData).reset_index()
现在,请找出如何修复列。嘿,感谢您的响应,但这就是我已经得到的。我想要数字体育1大联盟2 NBA 3NFL@skimchi1993请参见编辑,这对您有用吗?另外,我假设这有更多的行,而不仅仅是一行。。。(我上面的代码支持这一点)。我收到一个“仅对唯一值索引对象重新索引有效”错误。调查it@skimchi1993你有像
{1:NBA,2:NBA}
这样的条目吗?有。这是不允许的吗?