跟进我在同一项目中提出的上一个问题,我有一个 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
我的数据框中没有任何变化。我什至尝试关闭该警告,但无济于事。
非常感谢您对其中任何一个的帮助,因为我在它们上花了太长时间并且想继续前进,谢谢!
您的第一个问题是由
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)