我玩的是国际足联19数据集,其中有'工作率'栏,存储攻击和;防守球员的工作率,例如('Medium/Medium)。我想创建两个额外的列(就在原来的列旁边)来分别存储这些特性;让我们称之为“工作效率攻击”,“工作效率防御”。我想不出最好的方法,我一直在考虑应用简单的split函数,但它返回ValueError
def split_work_rate(text, work_type):
while not pd.isnull(text):
new_text = text.split('/')
if work_type == 'Attacking':
work_rate_attacking = new_text[0]
return work_rate_attacking
else:
work_rate_defending = new_text[1]
return work_rate_defending
def create_new_work_rates(data):
cols = ['Work Rate']
data['Work Rate Attacking'] = data[cols].apply(split_work_rate, args=('Attacking',))
data['Work Rate Defending'] = data[cols].apply(split_work_rate, args=('Defending',))
return data
ValueError: ('The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().', 'occurred at index Work Rate')
首先,问题是这条线:
在编写时,您可能会想,
pandas
会将每一行中的值与'Attacking'
进行比较,然后转到相应的分支然而,事实上,
pandas
立即将这种比较应用于整个Series
。因此,与'Attacking'
比较的结果不是一个布尔值,而是另一个Series
。没有无歧义的方法可以将Series
个布尔值转换为单个布尔值,因此if
测试不起作用无论如何,这可能不是最好的方法。试试这个:
这将使用
str
访问器将Series
拆分为DataFrame
,然后将其分配给所需的两列相关问题 更多 >
编程相关推荐