Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 使用函数替换列中的单元格值_Python 3.x_Pandas - Fatal编程技术网

Python 3.x 使用函数替换列中的单元格值

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.

我有一个相当大的数据帧22000X29。我想清理一个特定的列以进行数据聚合。一列值可以替换多个单元格。我想用replace函数编写一个函数来完成这个任务。如何将列名传递给函数

我尝试将列名作为变量传递给函数。 当然,我可以一个变量一个变量地做这个,但那会很乏味

#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