使用函数替换列中的单元格值

时间:2019-06-04 09:21:47

标签: python-3.x pandas

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

我尝试将列名作为变量传递给函数。 当然,我可以逐个变量地进行此操作,但这很繁琐

for

cimsBid是数据帧,SCity是我要在其中更改值的列

错误消息:

  

AttributeError:“ DataFrame”对象没有属性“ mycol”

4 个答案:

答案 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

将替换值作为字典来传递