我有一个 pandas 系列,我正在尝试将其转换为数据框。该系列是 1 列和 30 行。我想从索引 0 开始获取每三个元素,并将其作为新数据帧的第一个列。然后我想从索引 1 开始获取每三个元素,并将其作为新数据帧的第二个列。然后我想从索引 2 开始获取每个第三个元素,并将其作为新数据帧的第三个列。
我的 Pandas 系列是:
dfTMP
Out[65]:
1 14584416
2 96
3 2845
4 14112187
5 96
6 1629
7 12312225
8 77
9 4165
10 13466612
11 45
12 4146
13 12651673
14 27
15 1791
16 12565436
17 26
18 2956
19 14362965
20 26
21 3714
22 12352162
23 25
24 1689
25 12059502
26 25
27 2612
28 11659730
29 22
30 3771
Name: 4, dtype: int64
我尝试了以下方法:
dfNEW = pd.DataFrame(columns = ['appID', 'rel', 'au']) # creates empty dataframe
dfNEW['appID'] = dfTMP.iloc[0::3] # starting at 0, takes every 3rd element
dfNEW['rel'] = dfTMP.iloc[1::3] # starting at 1, takes every 3rd element
dfNEW['au'] = dfTMP.iloc[2::3] # starting at 2, takes every 3rd element
此代码仅创建第一个列(或者实际上是我首先复制的系列的切片)。
- 为什么上述代码不适用于所有列?在第一列之后,我得到了列的 nan。
- 执行此操作的正确方法是什么?
谢谢
请您参考如下方法:
通过在 .values
上调用 reshape
传递所需的新值,只需reshape
Series
的 numpy 数组维度并将数组传递给 DataFrame
构造函数:
In[12]:
dfNEW = pd.DataFrame(s.values.reshape((10,3)),columns = ['appID', 'rel', 'au'])
dfNEW
Out[12]:
appID rel au
0 14584416 96 2845
1 14112187 96 1629
2 12312225 77 4165
3 13466612 45 4146
4 12651673 27 1791
5 12565436 26 2956
6 14362965 26 3714
7 12352162 25 1689
8 12059502 25 2612
9 11659730 22 3771
至于为什么它不起作用 pandas
你没有现有的索引,所以它不能在另一个 df 上对齐,另外你的初始 df 是空的。除非您使用 reindex
预分配行,append
显式附加行,或者执行 setting with enlargement ,否则您无法使用此方法增长或追加到 df。