【问题标题】:List of values to Columns in Pandas DataFramePandas DataFrame 中列的值列表
【发布时间】:2017-05-03 06:40:34
【问题描述】:

我有一个 DataFrame,其中一列包含值列表(每个值都是一个特征的值)。现在我需要将这些值列表转换为每一列。
例如:DataFrame 有两列,其中数据列是值列表

   data  ,  Time      
[1,2,3,4], 12:34   
[5,6,7,8], 12:36   
[9,1,2,3], 12:45

然后我需要转换为

例如:

   data0 data1 data2 data3 Time
    1   ,  2  ,  3  ,  4  , 12:34    
    5   ,  6  ,  7  ,  8  , 12:36    
    9   ,  1  ,  2  ,  3  , 12:45

我怎样才能有效地做到这一点?

【问题讨论】:

    标签: python pandas numpy dataframe


    【解决方案1】:

    您可以使用DataFrame 构造函数将datavalues + tolistadd_prefix 和最后joinTime 转换为numpy array

    df = pd.DataFrame(df['data'].values.tolist()).add_prefix('data').join(df['Time'])
    print (df)
       data0  data1  data2  data3   Time
    0      1      2      3      4  12:34
    1      5      6      7      8  12:36
    2      9      1      2      3  12:45
    

    【讨论】:

      【解决方案2】:

      numpy
      我们通过直接在值上使用 np.column_stack 获得了一个非常快速的解决方案。剩下要做的就是将列拼接在一起

      v = np.column_stack([df.data.values.tolist(), df.Time.values])
      c = ['data{}'.format(i) for i in range(v.shape[1] - 1)] + ['Time']
      pd.DataFrame(v, df.index, c)
      
        data0 data1 data2 data3   Time
      0     1     2     3     4  12:34
      1     5     6     7     8  12:36
      2     9     1     2     3  12:45
      

      时间

      %%timeit
      pd.DataFrame(df['data'].values.tolist()).add_prefix('data').join(df['Time'])
      1000 loops, best of 3: 1.13 ms per loop
      
      %%timeit
      v = np.column_stack([df.data.values.tolist(), df.Time.values])
      c = ['data{}'.format(i) for i in range(v.shape[1] - 1)] + ['Time']
      pd.DataFrame(v, df.index, c)
      10000 loops, best of 3: 183 µs per loop
      

      【讨论】:

        猜你喜欢
        • 2022-01-09
        • 1970-01-01
        • 2018-05-10
        • 2015-03-16
        • 2015-01-24
        • 1970-01-01
        • 2013-06-14
        相关资源
        最近更新 更多