[英]Python: How to update only NaN values in pandas.DataFrame?
I have got two data frames.我有两个数据框。
>>> import pandas as pd
>>> import numpy as np
>>> df = pd.DataFrame({'A': [1, 2, 3], 'B': [400, np.nan, 600]})
>>> print(df)
A B
0 1 400.0
1 2 NaN
2 3 600.0
and和
>>> new_df = pd.DataFrame({'B': [4, 5, 6], 'C': [7, 8, 9]})
>>> print(new_df)
B C
0 4 7
1 5 8
2 6 9
How can I update df
by new_df
to fill NaN values?如何通过new_df
更新df
以填充 NaN 值? I would like to get following:我想得到以下信息:
>>> print(df)
A B
0 1 400.0
1 2 5.0
2 3 600.0
I think you are looking for this:我想你正在寻找这个:
df.fillna(new_df)
import numpy as np
df['B'] = np.where(df['B'].isnull(), new_df['B'], df['B'])
One way of doing this is using .update
一种方法是使用.update
df.update(new_df, overwrite = False)
df.head()
#output:
A B
0 1 400.0
1 2 5.0
2 3 600.0
%%timeit
df = pd.DataFrame({'A': [1, 2, 3] * 1000, 'B': [400, np.nan, 600] * 1000})
new_df = pd.DataFrame({'B': [4, 5, 6] * 1000, 'C': [7, 8, 9] * 1000})
df.update(new_df, overwrite = False)
4.24 ms ± 48.1 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)每个循环 4.24 毫秒 ± 48.1 微秒(平均值 ± 标准偏差。7 次运行,每次 100 次循环)
%%timeit
df = pd.DataFrame({'A': [1, 2, 3] * 1000, 'B': [400, np.nan, 600] * 1000})
new_df = pd.DataFrame({'B': [4, 5, 6] * 1000, 'C': [7, 8, 9] * 1000})
df.fillna(new_df)
6.78 ms ± 229 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)每个循环 6.78 毫秒 ± 229 微秒(平均值 ± 标准偏差。7 次运行,每次 100 次循环)
%%timeit
df = pd.DataFrame({'A': [1, 2, 3] * 1000, 'B': [400, np.nan, 600] * 1000})
new_df = pd.DataFrame({'B': [4, 5, 6] * 1000, 'C': [7, 8, 9] * 1000})
df['B'] = np.where(df['B'].isnull(), new_df['B'], df['B'])
3.91 ms ± 153 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)每个循环 3.91 毫秒 ± 153 微秒(平均值 ± 标准偏差。7 次运行,每次 100 次循环)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.