【发布时间】:2018-11-22 16:51:48
【问题描述】:
更新数据框列 FractionOfVote 时,我的第一步是添加一个新列 FractionOfVote,默认为 数值。然后使用 split 解析数据框列 Votes。
以下两个函数代码可以正常工作:1) add_new_column_fraction(), 2) add_new_column_votes()。
def add_new_column_fraction(df):
df['FractionOfVote'] = 'NA'
def add_new_column_votes(df):
df[['YesVotes','NumVotes']] = df['Votes'].str.split('/',expand=True)[[0,1]]
问题代码在函数calc_fraction_ratio_for_votes()中找到
def calc_fraction_ratio_for_votes(df):
for idx, row in df.iterrows():
numerator = row['YesVotes']
denomerator = row['NumVotes']
try:
row['FractionOfVote'] = float(numerator) / float(denomerator)
except ZeroDivisionError:
row['FractionOfVote'] = 'NaN'
此函数采用另外两个数据框列 YesVotes、NumVotes,并计算新的浮点值 列 FractionOfVote,之前在 add_new_column_fraction() 中定义。
逻辑错误是 FractionOfVote 列保留了原始更新后的“NA”;并且从未收到来自“row['FractionOfVote'] = float(numerator) / float(denomerator)”的更新,其中包括浮点值计算,或者来自“除了 ZeroDivisionError”的“NaN”。
【问题讨论】:
标签: python python-3.x pandas series divide-by-zero