Python - 如何根据条件替换 Pandas 行中的值?

问题描述 投票:0回答:1

跟进我在同一项目中提出的上一个问题,我有一个 Pandas 数据框

sheet
,看起来像这样:

0 0 0 0 NaN 2022 2022 2022 NaN
1 文字1 文字2 文字3 NaN 文字4 文字5 文字6 NaN
2 值1 值2 值3 NaN 值4 值5 值6 NaN

在第二个

NaN
列之后,该模式在随后的年份中重复,直到 2030 年。

首先,我想删除 first

NaN
列,同时保留其余部分。

其次,我想将索引

NaN
处的所有
1
替换为
text7

关于第一个问题,我尝试了以下方法:

sheet.drop(columns = sheet.columns[3], axis = 1, inplace=True

但是,这只是删除了与我想删除的列相同的每一列,而不仅仅是那一列。我无法弄清楚这一点,所以我只是转向我的第二个目标,如下:

values_to_replace = {'NaN':'Next Deadline'}
sheet.iloc[1].replace(values_to_replace,inplace=True)

然而,这只是吐出来:

#SettingWithCopyWarning: 
#A value is trying to be set on a copy of a slice from a DataFrame

我的数据框中没有任何变化。我什至尝试关闭该警告,但无济于事。

非常感谢您对其中任何一个的帮助,因为我在它们上花了太长时间并且想继续前进,谢谢!

python pandas replace drop
1个回答
0
投票

您的第一个问题是由

drop
删除名为 NaN
all
列引起的。要解决此问题,请从数据帧中获取切片(使用此答案中的技术):

import numpy as np

sheet = sheet.iloc[:, np.r_[:3, 4:len(sheet.columns)]]

对于第二个问题,警告告诉您为什么数据帧没有更改:您正在数据帧(sheet.iloc[1])中切片的

副本
上设置值。您需要将操作结果分配回该位置(并从
inplace=True
中删除
replace
),即

sheet.iloc[1] = sheet.iloc[1].replace(values_to_replace)
© www.soinside.com 2019 - 2024. All rights reserved.