用另一个datafram的特定列的值替换dataframe的特定列的值

2024-05-14 22:09:24 发布

您现在位置:Python中文网/ 问答频道 /正文

我在用其他数据帧的列值替换数据帧的一列中的nan值时遇到问题。 下面是一个测试示例:

    Name  Age Name2
0    tom   10   tom
1   nick   15  nick
2   juli   14  juli
3    NaN   12  anne
4  error   17   neo

我想用其他dataframe中的特定值替换列名中的Nan值(如果其中有一些Nan值,则不替换其他列),例如,此dataframe中的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)]

然后我尝试了这三种方法,但都不起作用-我的数据帧始终保持Nan值。你知道吗

df.Name.fillna(df1.Name2, inplace=True)

df.where(df.Name.isnull(), df1.Name2, axis=0)

df[df.Name.isnull()].Name=df1.Name2

你能告诉我哪里出错了吗?你知道吗


Tags: 数据namedataframedfageerrornannick
1条回答
网友
1楼 · 发布于 2024-05-14 22:09:24

有必要将一个元素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

相关问题 更多 >

    热门问题