[英]Replacing Nan value from specific column of a dataframe with value from specific column of another dataframe
I have a problem replacing the nan values in one column of the dataframe with column values of other dataframe.我在用其他数据帧的列值替换数据帧的一列中的 nan 值时遇到问题。 Here's test example:
这是测试示例:
Name Age Name2
0 tom 10 tom
1 nick 15 nick
2 juli 14 juli
3 NaN 12 anne
4 error 17 neo
I want to replace Nan values from column Name (not other columns if there is some Nan values in them) with specific value from other dataframe, for instance Name2 value from this dataframe:我想用来自其他数据帧的特定值替换列 Name 中的 Nan 值(不是其他列,如果其中有一些 Nan 值),例如来自这个数据帧的 Name2 值:
Name Age Name2
4 error 17 neo
What I want to get is this:我想得到的是这样的:
Name Age Name2
0 tom 10 tom
1 nick 15 nick
2 juli 14 juli
3 neo 12 anne
4 error 17 neo
This is test code for this example:这是此示例的测试代码:
# initialize list of lists
data = [['tom', 10, 'tom'], ['nick', 15, 'nick'], ['juli', 14, 'juli'], [np.nan, 12, 'anne'], ['error', 17, 'neo']]
# Create the pandas DataFrame
df = pd.DataFrame(data, columns = ['Name', 'Age', 'Name2'])
df1=df[df.Age==np.max(df.Age)]
Then I tried those three methods, but none works - my dataframe always stays with Nan value.然后我尝试了这三种方法,但都不起作用 - 我的数据框始终保持 Nan 值。
df.Name.fillna(df1.Name2, inplace=True)
df.where(df.Name.isnull(), df1.Name2, axis=0)
df[df.Name.isnull()].Name=df1.Name2
Can you tell me where I'm making mistake?你能告诉我我哪里出错了吗?
Here is necessary convert one element Series
to scalar:这里有必要将一个元素
Series
转换为标量:
df.Name.fillna(df1.Name2.iat[0], inplace=True)
#assign output to new DataFrame, test for not missing values
df = df.where(df.Name.notna(), df1.Name2.iat[0])
#use DataFrame.loc for avoid SettingWithCopyWarning
df.loc[df.Name.isnull(), 'Name']=df1.Name2.iat[0]
print (df)
Name Age Name2
0 tom 10 tom
1 nick 15 nick
2 juli 14 juli
3 neo 12 anne
4 error 17 neo
Detail :详情:
print (df1.Name2)
4 neo
Name: Name2, dtype: object
print (df1.Name2.iat[0])
neo
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.