当前位置:  开发笔记 > 编程语言 > 正文

如何快速填充大量数据以利用熊猫fillna?

如何解决《如何快速填充大量数据以利用熊猫fillna?》经验,为你挑选了0个好方法。

我有两个数据框,一个大的有很多缺失值,第二个有数据以填充第一个中的缺失数据。

数据框示例:

In[34]:
import pandas as pd
import numpy as np

df2 = pd.DataFrame({'A': [1, 1, 1, 2, 2, 2], 'B': [1, 0, 1, 1, 0, 0]})

df = pd.DataFrame({'A': [0, 1, 2, 3, 4, 5], 'B1': [1, np.nan, np.nan, 8, 9, 1],'B2':[1, np.nan, np.nan, 7, 6, 1], 'B3':[1, np.nan, np.nan, 8, 7, 1] })
df=df.set_index(['A'])
df2=df2.set_index(['A'])

In[35]:
df

Out[35]: 
   B1  B2  B3
A            
0   1   1   1
1 NaN NaN NaN
2 NaN NaN NaN
3   8   7   8
4   9   6   7
5   1   1   1

In[36]:
df2

Out[36]: 
   B
A   
1  1
1  0
1  1
2  1
2  0
2  0

所以我想做的是使用df2中的数据填充df,同时考虑到df2中的第二个实例时B1不是B2。参见下面的所需输出:

In[38]:
df

Out[38]: 
   B1  B2  B3
A            
0   1   1   1
1   1   0   1
2   1   0   0
3   8   7   8
4   9   6   7
5   1   1   1

B1,B2和B3中1和2的NaN已被df2的数据填充。1 0 1用于索引1,1 0 0用于索引2。请参见下面我对循环实现的低效率:

In[37]:
count=1
seen=[]

for t in range(0, len(df2)):
     if df2.index[t] not in seen:
         count=1
         seen.append(df2.index[t])
     else:
         count=count+1
     tofill=pd.DataFrame(df2.iloc[t]).transpose()
     tofill_dict={"B"+str(count):tofill.B}
     df=df.fillna(value=tofill_dict)

这是可行的,但是当数据集变大时,可能要花费大量时间。所以我的问题是,是否有办法更快地做到这一点?我听说矢量化可以工作,您将如何实现呢?还有其他方法可以更快地做到这一点吗?

推荐阅读
ar_wen2402851455
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有