用来自另一个数据框的特定列的值替换来自数据框的特定列的 Nan 值
Replacing Nan value from specific column of a dataframe with value from specific column of another dataframe
我在用其他数据帧的列值替换数据帧的一列中的 nan 值时遇到问题。
这是测试示例:
Name Age Name2
0 tom 10 tom
1 nick 15 nick
2 juli 14 juli
3 NaN 12 anne
4 error 17 neo
我想用其他数据框中的特定值替换名称列中的 Nan 值(如果其中有一些 Nan 值则不是其他列),例如此数据框中的 Name2 值:
Name Age Name2
4 error 17 neo
我想得到的是这个:
Name Age Name2
0 tom 10 tom
1 nick 15 nick
2 juli 14 juli
3 neo 12 anne
4 error 17 neo
这是这个例子的测试代码:
# 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)]
然后我尝试了这三种方法,但 none 有效 - 我的数据框始终保持 Nan 值。
df.Name.fillna(df1.Name2, inplace=True)
df.where(df.Name.isnull(), df1.Name2, axis=0)
df[df.Name.isnull()].Name=df1.Name2
你能告诉我哪里出错了吗?
此处需要将一个元素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
详情:
print (df1.Name2)
4 neo
Name: Name2, dtype: object
print (df1.Name2.iat[0])
neo
我在用其他数据帧的列值替换数据帧的一列中的 nan 值时遇到问题。 这是测试示例:
Name Age Name2
0 tom 10 tom
1 nick 15 nick
2 juli 14 juli
3 NaN 12 anne
4 error 17 neo
我想用其他数据框中的特定值替换名称列中的 Nan 值(如果其中有一些 Nan 值则不是其他列),例如此数据框中的 Name2 值:
Name Age Name2
4 error 17 neo
我想得到的是这个:
Name Age Name2
0 tom 10 tom
1 nick 15 nick
2 juli 14 juli
3 neo 12 anne
4 error 17 neo
这是这个例子的测试代码:
# 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)]
然后我尝试了这三种方法,但 none 有效 - 我的数据框始终保持 Nan 值。
df.Name.fillna(df1.Name2, inplace=True)
df.where(df.Name.isnull(), df1.Name2, axis=0)
df[df.Name.isnull()].Name=df1.Name2
你能告诉我哪里出错了吗?
此处需要将一个元素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
详情:
print (df1.Name2)
4 neo
Name: Name2, dtype: object
print (df1.Name2.iat[0])
neo