Python 3.x 使用函数替换列中的单元格值
我有一个相当大的数据帧22000X29。我想清理一个特定的列以进行数据聚合。一列值可以替换多个单元格。我想用replace函数编写一个函数来完成这个任务。如何将列名传递给函数 我尝试将列名作为变量传递给函数。 当然,我可以一个变量一个变量地做这个,但那会很乏味Python 3.x 使用函数替换列中的单元格值,python-3.x,pandas,Python 3.x,Pandas,我有一个相当大的数据帧22000X29。我想清理一个特定的列以进行数据聚合。一列值可以替换多个单元格。我想用replace函数编写一个函数来完成这个任务。如何将列名传递给函数 我尝试将列名作为变量传递给函数。 当然,我可以一个变量一个变量地做这个,但那会很乏味 #replace in df from list def replaceCell(mylist,myval,mycol,mydf): for i in range(len(mylist)): mydf.mycol.
#replace in df from list
def replaceCell(mylist,myval,mycol,mydf):
for i in range(len(mylist)):
mydf.mycol.replace(to_replace=mylist[i],value=myval,inplace=True)
return mydf
replaceCell((c1,c2,c3,c4,c5,c6,c7),c0,'SCity',cimsBid)
cimsBid是Dataframes,SCity是我想要更改值的列
错误消息:
AttributeError:“DataFrame”对象没有属性“mycl”
尝试以以下方式访问您的列:
mydf[mycol]
在该命令上:
mydf.mycol.replace(to_replace=mylist[i],value=myval,inplace=True)
属性运算符不允许对变量名进行列访问。您需要通过索引操作符[]
访问它,如下所示:
mydf[mycol].replace(to_replace=mylist[i],value=myval,inplace=True)
几乎没有更多的警告了
警告
- 只有当index元素是有效的Python标识符时,才能使用此访问,例如不允许使用s.1。请参见此处以了解有关的解释 有效标识符
- 如果该属性与现有方法名称冲突,例如不允许使用s.min,则该属性将不可用
- 类似地,如果该属性与以下任何列表冲突,则该属性将不可用:索引、长轴、短轴、项目
- 在上述任何情况下,标准索引仍然有效,例如s['1']、s['min']和s['index']将访问相应的
元素或列
将列作为字符串寻址。 您应该传递整个要替换的值列表(to_replace)和新值列表(value)。(不要使用元组。 如果您想用相同的新值替换所有值,最好是这样
def replaceCell(mylist,myval,mycol,mydf):
mydf[mycol].replace(to_replace=mylist,value=myval,inplace=True)
return mydf
这将返回带有替换值的df
如果只想更改几个值,可以在循环中执行此操作
def replaceCell2(mylist,myval,mycol,mydf):
for i in range(len(mylist)):
mydf[mycol].replace(to_replace=mylist[i],value=myval,inplace=True)
return mydf
嗨,试试这些功能,希望它能工作
def replace_values(replace_dict,mycol,mydf):
mydf = mydf.replace({mycol: replace_dict})
return mydf
将替换值传递为DictonaryThank!我做到了!发布后我立即看到了您的答案,系统说等待一分钟。现在返回一个。我看到您正在一次性替换整个列表,而不是逐项替换。我猜在更大的数据帧中节省的时间将至关重要?感谢您的洞察力。循环是必要的如果只应替换少数值,则为ry
# example dataframe
df = pd.DataFrame( {'SCity':['A','D','D', 'B','C','A','B','D'] ,
'value':[23, 42,76,34,87,1,52,94]})
# Only entries with value 'A' or 'B' will be replaced by 'c0'
mylist = ['A','B']
myval = 'c0'
df = replaceCell2(mylist,myval,'SCity',df)
# the output
df
SCity value
0 c0 23
1 D 42
2 D 76
3 c0 34
4 C 87
5 c0 1
6 c0 52
7 D 94
def replace_values(replace_dict,mycol,mydf):
mydf = mydf.replace({mycol: replace_dict})
return mydf