Pandas数据处理求助:删除指定NaN列及替换行值遇报错
问题解决方案
1. 删除第一个NaN列(仅删除位置索引为3的列)
你之前的代码会删除所有列名为NaN的列,因为Pandas的drop方法传入列名时,会匹配所有同名列。要只删除指定位置的列,直接按列的位置索引筛选即可:
# 保留除索引3之外的所有列 sheet = sheet.iloc[:, [i for i in range(sheet.shape[1]) if i != 3]]
或者更简洁的写法:
sheet.drop(sheet.columns[[3]], axis=1, inplace=True)
这里用列表[3]包裹位置索引,Pandas会识别为按位置删除单个列,而非匹配列名。
2. 替换索引1行中的所有NaN为text7
你遇到的SettingWithCopyWarning是因为sheet.iloc[1]返回的是原DataFrame的副本,修改副本不会影响原数据。直接对原DataFrame的行进行赋值即可解决:
确保替换的是Pandas中的缺失值np.nan(而非字符串'NaN'),代码如下:
import numpy as np # 替换第2行(索引1)的所有NaN为'text7' sheet.iloc[1] = sheet.iloc[1].replace(np.nan, 'text7')
或者更高效的写法,仅定位该行的NaN位置赋值:
sheet.loc[1, sheet.loc[1].isna()] = 'text7'
这样既不会触发警告,也能直接修改原DataFrame的数据。
内容的提问来源于stack exchange,提问作者Nick Seymour
相关产品推荐
相关产品推荐

