将列表项拆分为单独的列 - 熊猫数据框

交换尼

我有看起来像这样的初始熊猫数据框 - 每个单元格都是初始输入的值列表

Python 脚本 - 获取初始数据帧 - 就像 Ian Thompson 在这个答案中提到的那样 -

import pandas as pd

df_out1 = pd.DataFrame({
    0: [
        [None, 'A', 'B', 'C', 'D'],
        [None, 'A1', 'B1', 'C1', 'D1'],
        [None, 'A2', 'B2', 'C2', 'D2'],
    ],
    1: [
        [None] * 5,
        [None] * 5,
        [None] * 5,
    ],
    2: [
        ['V', 'W', 'X', 'Y', 'Z'],
        ['V1', 'W1', 'X1', 'Y1', 'Z1'],
        ['V2', 'W2', 'X2', 'Y2', 'Z2'],
    ]
})

我想像这样格式化 - 对于每一行 - 列表的每个项目形成一列,并为所有重复/迭代执行此操作 -所需的输出

我的原始输入数据集很大 - 10,000 行和 40 列。我在 python 脚本下执行 - 尽管它正在工作并提供所需的输出 - 当我运行它 2000 行和 40 列时 - 运行时间接近 1800 秒,我认为这是在更高的一侧。

Python 脚本:df_out1 是初始数据帧

d = pd.DataFrame()
for x in range(len(df_out1)):
    for y in range(len(df_out1.columns)):
        d = d.append(pd.Series(df_out1[y][x]), ignore_index=True)
d.to_csv('inter_alm_output_' + str(time.strftime("%Y%m%d-%H%M%S")) + '.csv')

有没有办法在更短的时间内实现这一目标,换句话说,优化它?

伊恩·汤普森

如果这是您的起始数据框:

df = pd.DataFrame({
    0 : [
        [None, 'A', 'B', 'C', 'D'],
        [None, 'A1', 'B1', 'C1', 'D1'],
        [None, 'A2', 'B2', 'C2', 'D2'],
    ],
    1 : [
        [None]*5,
        [None]*5,
        [None]*5,
    ],
    2 : [
        ['V', 'W', 'X', 'Y', 'Z'],
        ['V1', 'W1', 'X1', 'Y1', 'Z1'],
        ['V2', 'W2', 'X2', 'Y2', 'Z2'],
    ]
})

您可以通过应用pd.Series和连接结果来重新格式化列

print(pd.concat([
    df[i].apply(pd.Series) for i in df.columns
]).sort_index().reset_index(drop=True))

      0     1     2     3     4
0  None     A     B     C     D
1  None  None  None  None  None
2     V     W     X     Y     Z
3  None    A1    B1    C1    D1
4  None  None  None  None  None
5    V1    W1    X1    Y1    Z1
6  None    A2    B2    C2    D2
7  None  None  None  None  None
8    V2    W2    X2    Y2    Z2

另一种不使用的方法pd.concat

print(df.stack().reset_index(drop=True).apply(pd.Series))

      0     1     2     3     4
0  None     A     B     C     D
1  None  None  None  None  None
2     V     W     X     Y     Z
3  None    A1    B1    C1    D1
4  None  None  None  None  None
5    V1    W1    X1    Y1    Z1
6  None    A2    B2    C2    D2
7  None  None  None  None  None
8    V2    W2    X2    Y2    Z2

第一种方法在

  • 3.93 ms ± 154 µs per loop (mean ± std. dev. of 7 runs, 100 loops each

第二种方法在

  • 2.34 ms ± 66.4 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

您的原始代码完成于

  • 15 ms ± 340 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

熊猫将列内的列表拆分为单独的列

大熊猫:将数据框列拆分为单独的行

将 Pandas 数据框列中的句子列表拆分为单独的列

将列表拆分为R中的单独数据框

通过“ * \ n”将列表内容拆分为熊猫数据框

熊猫数据框列拆分为日期列表

大熊猫:根据某些列的字符串值将数据框拆分为单独的数据框

将大数据框中的列表拆分为熊猫中的列

将熊猫数据框拆分为多个数据框,列表列表作为掩码

如何将包含列表作为字段的熊猫数据框拆分为多索引数据框?

将大数据框拆分为较小的熊猫数据框列表

将数据框列中的列表拆分为多个列

熊猫数据框列拆分

将熊猫数据框行拆分为新的数据框,直到搜索到的列值

数据框列表熊猫

将大熊猫中的字典拆分为单独的列

如何垂直将熊猫数据框内的嵌套列表拆分为单独的行

将熊猫数据框拆分为互斥的子集

将元组字典拆分为熊猫数据框

熊猫数据框使用某种条件将一列数据拆分为2

如何将数据从熊猫数据框的一列拆分为新数据框的多列

Python-将矩阵数据拆分为单独的列

根据熊猫数据框中的内容将一列拆分为两列

如何将仅包含数字的数据框中的列拆分为熊猫中的多列

如何将数据框列拆分为熊猫中的另一列?

在熊猫数据框中使用定界符将列拆分为未知列数

如何基于包含的文本值将熊猫数据框列拆分为多列

熊猫数据框文本拆分

将数据框的列中的元组列表拆分为数据框的列