Python 如何有效地向缺少值的数据帧添加行?
假设我有许多不同列名的行,如何更有效地将它们添加到pandas的数据帧中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
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