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