在Pandas DataFrame中,将值列表转换为列的列表

7

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

我该如何高效地完成这个任务?
2个回答

10

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

%%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

8

您可以使用 DataFrame 构造函数,通过将列 data 转换为 numpy array,并使用 values + tolistadd_prefix 和最后一步的joinTime

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接