Pandas中避免「在DataFrame切片副本上赋值」错误的方法
Pandas赋值错误的解决方法
原始代码与错误
运行以下代码时触发警告:
df = pd.readexcel(excel_name) groupColumn = df('Group') # Excel中有一列名为Group for row in range(1, len(df)): if "unused" in groupColumn[row]: groupColumn[row] = "input logic unused"
错误提示:
尝试在DataFrame切片的副本上设置值(A value is trying to be set on a copy of a slice from a DataFrame)
实际代码中包含赋值语句:groupColumn[row] = "input logic unused" + str(unusedPinsCount),需解决该警告问题。
解决方法
方法一:用Pandas矢量化操作(推荐)
Pandas的优势在于矢量化运算,比循环高效且彻底避免视图/副本问题,直接操作原DataFrame:
import pandas as pd df = pd.read_excel(excel_name) # 定位包含"unused"的行,直接修改Group列 df.loc[df['Group'].str.contains('unused'), 'Group'] = "input logic unused" + str(unusedPinsCount)
方法二:若需保留循环,明确创建副本
如果一定要用循环,先通过.copy()获取列的独立副本,修改完成后再赋值回原DataFrame:
import pandas as pd df = pd.read_excel(excel_name) # 明确创建列的副本,避免视图关联问题 groupColumn = df['Group'].copy() for row in range(len(df)): # 转字符串避免非字符串类型报错 if "unused" in str(groupColumn[row]): groupColumn[row] = "input logic unused" + str(unusedPinsCount) # 将修改后的列放回原DataFrame df['Group'] = groupColumn
原代码的两处基础修正
pd.readexcel→pd.read_excel:这是Pandas读取Excel文件的正确函数名df('Group')→df['Group']:获取DataFrame列的正确方式是使用方括号而非圆括号
内容的提问来源于stack exchange,提问作者Anirudh
相关产品推荐
相关产品推荐

