我正在编写一个 Pandas 脚本来对 Excel 文件执行数据操作。首先,我将两张表加载到数据框中。一个是原始数据
df
,第二个是一张详细说明需要在原始数据中进行替换的表格replace
。
脚本需要为
df
的每一行执行两件事。
将
'Name'
中 df
的每个实例替换为 'NameReplace'
(工作)
对于
df
中的相同行,将列的切片(由列表指定)替换为 replace
中同一列切片中的值
我当前实现的可重现的最小示例:
import pandas
df = pandas.DataFrame([["John", None, None],["Phil", None, None],["John", None, None],["Bob", None, None]], columns=["Name", "Age", "Height"])
replace = pandas.DataFrame([["John", "Dom", 25, 175],["Phil", "Kevin", 56, 145],["Bob", "Michael", 33, 180]], columns=["Name", "NameReplace", "Age", "Height"])
detailsList = ["Age", "Height"]
for i, row in replace.iterrows():
df.loc[df['Name'] == row['Name'], 'Name'] = row['NameReplace']
df.loc[df['Name'] == row['NameReplace'], detailsList] = row[detailsList]
print(df)
步骤 1) 正在使用此实现,但
detailsList
中的 df
列未填充。 Name Age Height
0 Dom NaN NaN
1 Kevin NaN NaN
2 Dom NaN NaN
3 Michael NaN NaN
期望的输出是
Name Age Height
0 Dom 25 175
1 Kevin 56 145
2 Dom 25 175
3 Michael 33 180
我已经尝试了一段时间了,但似乎没有取得任何进展。我也不太明白为什么这不起作用,所以任何见解都将受到额外的赞赏!
注意:使用detailsList
来指定列的切片是必要的,因为在实际的解决方案中,我只对完整数据帧的特定切片进行操作,这与我给出的示例不同。
for i, row in replace.iterrows():
df.loc[df['Name'] == row['Name'], 'Name'] = row['NameReplace']
df.loc[df['Name'] == row['NameReplace'], detailsList] = row[detailsList].values
print(df.loc[df['Name'] == row['NameReplace'], detailsList])