我想选一个字典列表中有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
我想我已经接近了,但是只需要一些有关如何正确转换数据框的帮助。
答案 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