gpt4 book ai didi

python - 如何有效地将缺失值的行添加到 pandas DataFrame 中?

转载 作者:行者123 更新时间:2023-12-01 04:14:42 25 4
gpt4 key购买 nike

假设我有很多行具有不同的列名,如何更有效地将它们添加到 pandas 的 DataFrame 中。

d = pd.DataFrame()
a = {'a':10,'b':1.3}
b = {'b':32.5,'c':3.14, 'm': 5.1}

我想要这样的结果:

d = 
a b c m
1 10 1.3 0 0
2 0 32.5 3.14 5.1

有两种方法:

1.

d = d.append(pd.DataFrame(a,index=[1]))
d = d.append(pd.DataFrame(b,index=[2]))
  • 首先获取所有唯一的列名称,然后
  • column_name = ['a','b','c','m']
    d = pd.DataFrame(columns = column_name)
    d.add(a)
    d.add(b)

    由于第一种方式需要join,那么方式2应该比方式1更快吗?

    或者还有更好的解决方案吗?

    最佳答案

    您也可以尝试使用pd.concatcombine_first 。你的第二种方法不能正常工作(或者可能是我错过了一些东西)。结果:

    df1 = pd.DataFrame(a, index=[0])
    df2 = pd.DataFrame(b, index=[1])

    d = pd.DataFrame()
    d = d.append(df1)
    d = d.append(df2).fillna(0)

    In [107]: d
    Out[107]:
    a b c m
    0 10 1.3 0.00 0.0
    1 0 32.5 3.14 5.1


    column_name = ['a', 'b', 'c', 'm']
    d = pd.DataFrame(columns = column_name)
    d.add(a)
    d.add(b)

    In [113]: d
    Out[113]:
    Empty DataFrame
    Columns: [a, b, c, m]
    Index: []


    In [115]: pd.concat([df1, df2]).fillna(0)
    Out[115]:
    a b c m
    0 10 1.3 0.00 0.0
    1 0 32.5 3.14 5.1

    d = pd.DataFrame()
    In [144]: d.combine_first(df1).combine_first(df2).fillna(0)
    Out[144]:
    a b c m
    0 10 1.3 0.00 0.0
    1 0 32.5 3.14 5.1

    基准测试:

    In [86]: %%timeit
    d = pd.DataFrame()
    d = d.append(df1)
    d = d.append(df2).fillna(0)
    ....:
    100 loops, best of 3: 3.29 ms per loop

    In [87]: %timeit c = pd.concat([df1, df2]).fillna(0)
    100 loops, best of 3: 1.94 ms per loop

    In [153]: %%timeit
    .....: d = pd.DataFrame()
    .....: d.combine_first(df1).combine_first(df2).fillna(0)
    .....:
    100 loops, best of 3: 3.17 ms per loop

    从这些方法中 pd.concat 更快

    关于python - 如何有效地将缺失值的行添加到 pandas DataFrame 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34450747/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com