在 pandas in Python 中将列表中的值作为数据框中的列值的可扩展方法

Scalable approach to make values in a list as column values in a dataframe in pandas in Python

我有一个 pandas 数据框,它只有一列,列中每个单元格的值是一个 list/array 数字,这个列表的长度为 100,并且这个长度在整个所有单元格值。

我们需要将每个列表值转换为列值,换句话说,有一个包含 100 列的数据框,每个列值位于 list/array 项。

像这样

变成

可以使用 iterrows() 来完成,如下所示,但是我们有大约 150 万行并且需要一个可扩展的解决方案,因为 iterrows() 会花费很多时间。

cols = [f'col_{i}' for i in range(0, 4)]
df_inter = pd.DataFrame(columns = cols)
for index, row in df.iterrows():
    df_inter.loc[len(df_inter)] = row['message']

你可以这样做:

In [28]: df = pd.DataFrame({'message':[[1,2,3,4,5], [3,4,5,6,7]]})

In [29]: df
Out[29]: 
           message
0  [1, 2, 3, 4, 5]
1  [3, 4, 5, 6, 7]

In [30]: res = pd.DataFrame(df.message.tolist(), index= df.index)

In [31]: res
Out[31]: 
   0  1  2  3  4
0  1  2  3  4  5
1  3  4  5  6  7

我认为这可行:

df.message.apply(pd.Series)

要使用 dask 进行缩放(假设已安装):

import dask.dataframe as dd

ddf = dd.from_pandas(df, npartitions=8)
ddf.message.apply(pd.Series, meta={0: 'object'})