Python列保留原始更新的“NA”;从不使用float更新
更新dataframe列FractionOfVote时,我的第一步是添加一个新列FractionOfVote,并使用默认值 NA值。然后使用split解析dataframe列vots 以下两个函数代码运行良好:1添加新列分数,2添加新列投票Python列保留原始更新的“NA”;从不使用float更新,python,python-3.x,pandas,series,divide-by-zero,Python,Python 3.x,Pandas,Series,Divide By Zero,更新dataframe列FractionOfVote时,我的第一步是添加一个新列FractionOfVote,并使用默认值 NA值。然后使用split解析dataframe列vots 以下两个函数代码运行良好:1添加新列分数,2添加新列投票 def add_new_column_fraction(df): df['FractionOfVote'] = 'NA' def add_new_column_votes(df): df[['YesVotes','NumVotes']] =
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_Faction_ratio_for_Voces中
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”;并且从未收到来自行['FractionOfVote']=floatnumerator/floatdenomerator的更新,其中包含浮点值计算,或来自except ZeroDivisionError的'NaN'。您应该尝试避免Python级别的循环。首先,如有必要,请确保序列为数字:
df = pd.DataFrame({'Yes': [0, 3, 0, 10, 0],
'Num': [0, 5, 0, 30, 2]})
num_cols = ['Yes', 'Num']
df[num_cols] = df[num_cols].apply(pd.to_numeric, errors='coerce')
然后使用除法并用NaN替换inf:
首先,为什么要使用iTerRows?使用矢量化实现可以获得如下相同的结果:
# Create column and fill all values to NaN by default
df['FractionOfVote'] = np.nan # import numpy as np if you didn't
# Populate the valid values with the ratio.
df.loc[df['NumVotes'].astype(float) > 0, 'FractionOfVote'] = df['YesVotes'] / df['NumVotes']
谢谢,没错,data.frames上的Python级循环似乎运行得有些不规则,感谢您捕捉并推荐避免data.frames上的Python循环当data.frames级函数更适合使用时为什么我使用ItError,Java迭代编程太多年了,这仍然在我的脑海中:
# Create column and fill all values to NaN by default
df['FractionOfVote'] = np.nan # import numpy as np if you didn't
# Populate the valid values with the ratio.
df.loc[df['NumVotes'].astype(float) > 0, 'FractionOfVote'] = df['YesVotes'] / df['NumVotes']