[英]How to replace string values of a Pandas column with a string except some values?
[英]pandas replace column values except one
原始数据框:
DocID DocURL DocName SiteURL LibraryURL
0 29806 path/to/doc/docname1.doc docname1 web/url lib/url
1 29807 path/to/doc/docname2.doc docname2 web/url lib/url
新数据框:
DocURL DocName SiteURL LibraryURL
0 path/to/doc/newname.doc newname web/url lib/url
我想用这个新行替换 DocID == 29806 的行。
我曾尝试使用以下代码进行操作,但没有成功:
df.loc[:, df.columns != 'DocID'].loc[row_index] = new_df.iloc[0]
和这个:
df.loc[row_index][1:] = new_df.iloc[0]
对于第一个我没有收到任何错误或警告,对于下一个我得到:
试图在来自 DataFrame 的切片副本上设置值
现在,我希望/需要将原始数据帧中的行替换为新数据帧的行,但我需要保持 DocID 不变。 我还需要将结果存储在原始数据框中。
一种方法是创建要替换的列列表,然后使用to_numpy
来避免任何对齐问题,例如:
cols_replace = ['DocURL','DocName','SiteURL','LibraryURL']
df.loc[row_index, cols_replace] = new_df.loc[0, cols_replace].to_numpy()
只需使用df.update()
即可获得所需内容。
代码:
df=pd.DataFrame({'DocID':[29806,29807],'DocURL':['path/to/doc/docname1.doc','path/to/doc/docname2.doc'],
'DocName':['docname1','docname2'],'SiteURL':['web/url','web/url'],
'LibraryURL':['lib/url','lib/url']})
df2=pd.DataFrame({'DocURL':['path/to/doc/newname.doc'],
'DocName':['newname'],'SiteURL':['web/url'],
'LibraryURL':['lib/url']})
df.update(df2)
输出:
DocID DocURL DocName SiteURL LibraryURL
0 29806 path/to/doc/newname.doc newname web/url lib/url
1 29807 path/to/doc/docname2.doc docname2 web/url lib/url
在这种情况下, df.update()
将使用df2
的新值更新df
的原始值。 更新将基于索引完成。 因此,请确保df2
中的索引号与df
的索引号匹配。
尝试这个:
df.loc[df['DocID'] == '29806', ['DocURL', 'DocName', 'SiteURL', 'LibraryURL']] = dfNew.iloc[0]['DocURL', 'DocName', 'SiteURL', 'LibraryURL']
new_df["DocID"] = [29806]
old_df.set_index("DocID")
new_df.set_index("DocID")
old_df.update(new_df)
最好的办法是将DocID
列添加到新数据框中,并使用您要更新的旧数据框中的 DocID 填充它。 然后,将DocID
设置为索引。 最后,调用.update
默认对齐索引,并且行为是完全受控的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.