我有一个 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 

此代码仅创建第一个列(或者实际上是我首先复制的系列的切片)。

  1. 为什么上述代码不适用于所有列?在第一列之后,我得到了列的 nan。
  2. 执行此操作的正确方法是什么?

谢谢

请您参考如下方法:

通过在 .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。


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!