Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.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值_Python_Pandas - Fatal编程技术网

Python 除法遇到NA值

Python 除法遇到NA值,python,pandas,Python,Pandas,我有一个数据框,需要处理两列,比如a和B ColB中有一些“NA”行。我试着这样做: df['ratio']= (df['A']/loan_data_df['B'].astype(int)).where(loan_data_df['B']!= 'NA') 但它不起作用。任何帮助都将不胜感激。我认为您需要将NA字符串替换为NaN(),然后与参数fill_value一起使用,以替换为1以防止NaN,如: 样本: df = pd.DataFrame({'A':[4,2,3],

我有一个数据框,需要处理两列,比如
a
B

Col
B
中有一些
“NA”
行。我试着这样做:

df['ratio']= (df['A']/loan_data_df['B'].astype(int)).where(loan_data_df['B']!= 'NA')

但它不起作用。任何帮助都将不胜感激。

我认为您需要将
NA
字符串替换为
NaN
(),然后与参数
fill_value
一起使用,以替换为
1
以防止
NaN
,如:

样本:

df = pd.DataFrame({'A':[4,2,3],
                   'B':['NA','4','5']})

df['ratio']= df['A'].div(df['B'].replace('NA', np.nan).astype(float), fill_value=1)
print (df)
   A   B  ratio
0  4  NA    4.0
1  2   4    0.5
2  3   5    0.6
如果无
NaN
NA
值:

df['ratio']= df['A'].div(df['B'].replace('NA',1).astype(float))
print (df)
   A   B  ratio
0  4  NA    4.0
1  2   4    0.5
2  3   5    0.6
但主要取决于您的数据,可能只需要:

df = pd.DataFrame({'A':[4,2,3],
                   'B':[np.nan,4,5]})

df['ratio']= df['A'].div(df['B'], fill_value=1)
print (df)
           A    B  ratio
0  4  NaN    4.0
1  2  4.0    0.5
2  3  5.0    0.6           

您只需将“NA”替换为
np.nan
,您可以尝试:

df = df.fillna(np.nan)
然后熊猫会把nan放在分区无效的地方

>>> import pandas as pd 
>>> import  numpy as np 
>>> df = pd.DataFrame({"A": [1, 3, 5, 29], "B": [5, 4, 44, np.nan]})
>>> df
    A     B
0   1   5.0
1   3   4.0
2   5  44.0
3  29   NaN
>>> df["A"]/df["B"]
0    0.200000
1    0.750000
2    0.113636
3         NaN
dtype: float64
>>> df["ratio"] = df["A"]/df["B"]
>>> df
    A     B     ratio
0   1   5.0  0.200000
1   3   4.0  0.750000
2   5  44.0  0.113636
3  29   NaN       NaN
>>> 

尝试用
np.nan
替换“NA”,谢谢你的详细回答,我试过了,效果不错!很高兴能帮上忙,天气真好!
>>> import pandas as pd 
>>> import  numpy as np 
>>> df = pd.DataFrame({"A": [1, 3, 5, 29], "B": [5, 4, 44, np.nan]})
>>> df
    A     B
0   1   5.0
1   3   4.0
2   5  44.0
3  29   NaN
>>> df["A"]/df["B"]
0    0.200000
1    0.750000
2    0.113636
3         NaN
dtype: float64
>>> df["ratio"] = df["A"]/df["B"]
>>> df
    A     B     ratio
0   1   5.0  0.200000
1   3   4.0  0.750000
2   5  44.0  0.113636
3  29   NaN       NaN
>>>