我有一个相当大的Dataframes 22000X29。我想清理一个特定的列以进行数据聚合。一个列值可以替换多个单元格。我想编写一个函数来使用replace函数来完成此任务。如何将列名传递给函数?
我尝试将列名作为变量传递给函数。 当然,我可以逐个变量地进行此操作,但这很繁琐
for
cimsBid是数据帧,SCity是我要在其中更改值的列
错误消息:
AttributeError:“ DataFrame”对象没有属性“ mycol”
答案 0 :(得分:1)
尝试以以下方式访问您的列:
mydf[mycol]
答案 1 :(得分:0)
关于此命令:
mydf.mycol.replace(to_replace=mylist[i],value=myval,inplace=True)
通过属性运算符访问熊猫列不允许使用变量名。您需要通过索引运算符[]
以以下方式访问它:
mydf[mycol].replace(to_replace=mylist[i],value=myval,inplace=True)
还有更多警告here
警告
- 仅当index元素是有效的Python标识符(例如,不允许使用s.1。看到这里的解释 有效的标识符。
如果该属性与现有的方法名称冲突,则该属性将不可用。不允许使用s.min。
类似地,如果该属性与以下任何列表相冲突,则该属性将不可用:索引,major_axis,minor_axis,项目。
- 在任何一种情况下,标准索引编制仍将有效,例如s ['1'],s ['min']和s ['index']将访问相应的
元素或列。
答案 2 :(得分:0)
以字符串形式寻址列。 您应该传递要替换的值的整个列表(to_replace)和新值的列表(value)。 (不要使用元组。 如果您要用相同的新值替换所有值,则最好
def replaceCell(mylist,myval,mycol,mydf):
mydf[mycol].replace(to_replace=mylist,value=myval,inplace=True)
return mydf
# example dataframe
df = pd.DataFrame( {'SCity':['A','D','D', 'B','C','A','B','D'] ,
'value':[23, 42,76,34,87,1,52,94]})
# replace the 'SCity' column with a new value
mylist = list(df['SCity'])
myval = ['c0']*len(mylist)
df = replaceCell(mylist,myval,'SCity',df)
# the output
df
SCity value
0 c0 23
1 c0 42
2 c0 76
3 c0 34
4 c0 87
5 c0 1
6 c0 52
7 c0 94
这将返回带有替换值的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
# 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
答案 3 :(得分:0)
您可以尝试使用这些功能
def replace_values(replace_dict,mycol,mydf):
mydf = mydf.replace({mycol: replace_dict})
return mydf