尝试基于其他行级数据,或其他dataframes类似数据清理在大熊猫数据帧(原产地)国家(CTRY)列。参见例如数据帧的链接。
它最终将饲料中的数据帧给予正确格式化的国家和数据质量“成绩”两个新列。
Origin Dataframe Nafta, Countries, and States DataFrames
该功能适用于那些在查询表中的值,或空白,但是当我通过“坏”的数据,它给出了一个无效的类型比较。该测试分别返回一个布尔值和作品:
Nafta.loc[Nafta[col] == a].empty .
不知道为什么,这是行不通的。我测试过的值,它的布尔值Boolan。见自定义函数和lambda。
def CountryScore(a,b,c):
if pd.isnull(a):
score = "blank"
if pd.notnull(b):
for col in States:
if States.loc[States[col]== b].empty != True:
corfor = States.iloc[States.loc[States[col] == b].index[-1],2]
break
else:
corfor = "Bad Data"
continue
elif pd.notnull(c):
if (len(str(c).strip()) <= 5) or (len(str(c).strip()) > 9):
corfor = "USA"
else:
corfor = "CAN"
else:
corfor = "Bad Data"
else:
for col in Nafta:
if Nafta.loc[Nafta[col] == a].empty != True:
score = "good"
corfor = Nafta.iloc[Nafta.loc[Nafta[col] == a].index[-1],1]
break
else:
score = "pending"
continue
if "pending" == score:
for col in Country:
if Country.loc[Country[col]== a].empty != True:
score = "good"
corfor = Country.iloc[Country.loc[Country[col] == a].index[-1],2]
break
else:
score = "bad"
corfor = "Bad Data"
continue
return score, corfor
origin["Origin Ctry Score"] , origin["Origin Ctry Format"] = zip(*origin.apply(lambda x: CountryScore(x["Origin Ctry"], x["Origin State"], x["Origin Zip"]), axis = 1))
假设dataframes已经加载。谢谢!!!
我能找到我的错误。在国家的最后一列,我比较一个整数字符串。事不关己布尔。修正了:
Country.loc[Country[col].astype(str)== a].empty != True
我将结束大部分包裹在这种类型的转换。