Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/336.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python列保留原始更新的“NA”;从不使用float更新_Python_Python 3.x_Pandas_Series_Divide By Zero - Fatal编程技术网

Python列保留原始更新的“NA”;从不使用float更新

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']] =

更新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']] = 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']