Python Don';我不理解这个属性错误:';功能';对象没有属性';伊萨尔法';
参考以下代码Python Don';我不理解这个属性错误:';功能';对象没有属性';伊萨尔法';,python,dataframe,isalpha,Python,Dataframe,Isalpha,参考以下代码 # import import pandas as pd import numpy as np import string # create data frame data = {'Name': ['Jas,on', 'Mo.lly', 'Ti;na', 'J:ake', '!Amy', "Myself"]} df = pd.DataFrame(data, columns = ['Name']) df # get cleanName - Function def getCle
# import
import pandas as pd
import numpy as np
import string
# create data frame
data = {'Name': ['Jas,on', 'Mo.lly', 'Ti;na', 'J:ake', '!Amy', "Myself"]}
df = pd.DataFrame(data, columns = ['Name'])
df
# get cleanName - Function
def getCleanName(pName):
vRetVals = pName.translate(str.maketrans(" ", " ", string.punctuation))
return(vRetVals)
# clean Name
print("PreClean Good Rows", df.shape[0] - df.Name.map(lambda v:v.isalpha()).sum())
df['Name'] = [getCleanName for n in df.Name]
print("PostClean Good Rows", df.shape[0] - df.Name.map(lambda v: v.isalpha()).sum())
问题
# import
import pandas as pd
import numpy as np
import string
# create data frame
data = {'Name': ['Jas,on', 'Mo.lly', 'Ti;na', 'J:ake', '!Amy', "Myself"]}
df = pd.DataFrame(data, columns = ['Name'])
df
# get cleanName - Function
def getCleanName(pName):
vRetVals = pName.translate(str.maketrans(" ", " ", string.punctuation))
return(vRetVals)
# clean Name
print("PreClean Good Rows", df.shape[0] - df.Name.map(lambda v:v.isalpha()).sum())
df['Name'] = [getCleanName for n in df.Name]
print("PostClean Good Rows", df.shape[0] - df.Name.map(lambda v: v.isalpha()).sum())
第一次运行以下行时,它将正常运行:
print("PreClean Good Rows", df.shape[0] - df.Name.map(lambda v: v.isalpha()).sum())
当第二次运行同一行时,会出现以下错误
AttributeError:'function'对象没有属性'isalpha'
任何想法,是什么导致了问题?您忘了调用
getCleanName
,因此您的列表
最后是一堆相同的函数引用。将其更改为:
df['Name'] = [getCleanName(n) for n in df.Name]
# ^^^ changed
实际调用函数并使用结果。您忘记调用
getCleanName
,因此您的列表
最终会有一堆相同的函数引用。将其更改为:
df['Name'] = [getCleanName(n) for n in df.Name]
# ^^^ changed
实际调用函数并使用结果。这里有
[getCleanName for n in df.Name]
,您的意思可能是[getCleanName(n)for n in df.Name]
。否则,您只是将对该函数的引用加载到列表中,而不是调用该函数。如果您有[getCleanName for n in df.Name]
,可能您的意思是[getCleanName(n)for n in df.Name]
。否则,您只是将对函数的引用加载到列表中,而不是调用函数。