【问题标题】:how to split single row into multiple columns with a specific column numbers in python?如何在python中将单行拆分为具有特定列号的多列?
【发布时间】:2019-04-29 19:56:08
【问题描述】:

如下所述,我在一行中有数据,但我想将行转换为 8 列,列索引为 var1,var2,var3,var4,var5,var6,var7,var8

0   0.008985
1   0.486024
2   0.800637
3   0.006264
4   5.030551
5   0.001959
6   0.002210
7   0.005949
8   0.008985
9   0.689814
10  0.889638
11  0.007462
12  5.589760
13  0.005739
14  0.006474
15  0.004770
16  0.008985
17  0.202327
18  0.152252
19  0.004041

我想有这种格式的数据框:

 var1 |  var2  |  var3  |  var4  |  var5  |  var6  |  var7  |var8
0.008985|0.486024|0.800637|0.006264|5.030551|0.001959|0.005949|0.002210
0.008985|0.689814|0.889638|0.007462|5.589760|0.005739|0.006474|0.004770

请建议如何在 python 中转换这个数据框?

提前谢谢你

【问题讨论】:

    标签: python pandas dataframe arraylist


    【解决方案1】:

    用途:

    cols=['var'+str(i+1) for i in range(8)]
    #['var1', 'var2', 'var3', 'var4', 'var5', 'var6', 'var7', 'var8']
    df=pd.DataFrame(df.groupby(df.index//8)[1].apply(list).values.tolist(),columns=cols)
    print(df)
    

           var1      var2      var3      var4      var5      var6      var7  \
    0  0.008985  0.486024  0.800637  0.006264  5.030551  0.001959  0.002210   
    1  0.008985  0.689814  0.889638  0.007462  5.589760  0.005739  0.006474   
    2  0.008985  0.202327  0.152252  0.004041       NaN       NaN       NaN   
    
           var8  
    0  0.005949  
    1  0.004770  
    2       NaN  
    

    注意 1 替换为您的原始列名。

    【讨论】:

    • @RigzinAngmo 很高兴它有帮助。如果是这样,请考虑将任何一个对您最有帮助的答案标记为accepted
    【解决方案2】:

    您可以将数据转换为numpy 数组并对其进行整形。然后从 numpy 数组中创建一个 DataFrame

    import pandas as pd
    import numpy as np
    
    n = 20
    df = pd.DataFrame({'row': range(n)})
    df = pd.DataFrame(np.array(df.row).reshape(2, -1))
    df.columns = [f'var{i}' for i in range(1, n//2 + 1)]
    

    【讨论】:

      【解决方案3】:

      使用 numpy 解决方案 - 更改 unutbu 回答一点 - 初始化由 NaNs 填充的空数组:

      arr = np.full(((len(df) - 1)//8 + 1)*8, np.nan)
      arr[:len(df)] = df['col']
      df = pd.DataFrame(arr.reshape((-1, 8)), columns=[f'var{i}' for i in range(1,9)])
      print (df)
             var1      var2      var3      var4      var5      var6      var7  \
      0  0.008985  0.486024  0.800637  0.006264  5.030551  0.001959  0.002210   
      1  0.008985  0.689814  0.889638  0.007462  5.589760  0.005739  0.006474   
      2  0.008985  0.202327  0.152252  0.004041       NaN       NaN       NaN   
      
             var8  
      0  0.005949  
      1  0.004770  
      2       NaN  
      

      【讨论】:

        猜你喜欢
        • 2023-04-02
        • 2019-11-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-10-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多