Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/282.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何有效地向缺少值的数据帧添加行?_Python_Performance_Pandas - Fatal编程技术网

Python 如何有效地向缺少值的数据帧添加行?

Python 如何有效地向缺少值的数据帧添加行?,python,performance,pandas,Python,Performance,Pandas,假设我有许多不同列名的行,如何更有效地将它们添加到pandas的数据帧中 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 有两种方法: 一, 首先获取所有唯一的列名,然后 column_name=['a','b','c','m'] d=pd.DataFr

假设我有许多不同列名的行,如何更有效地将它们添加到pandas的数据帧中

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
有两种方法:

一,

  • 首先获取所有唯一的列名,然后
  • column_name=['a','b','c','m']
    d=pd.DataFrame(列=列名称)
    d、 加(a)
    d、 加(b)
    
    因为第一条路需要加入,所以路2应该比路1快吗

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

    您也可以尝试使用和。你的第二种方法工作不正常(或者可能是我遗漏了什么)。结果:

    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

    更快

    您将得到
    Nan
    而不是
    0
    这没什么大不了的,只是
    d.fillna(0)
    。谢谢,
    pd.concat
    真的更快。
    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