2017-08-29 57 views
1

我有一个数据框,我需要处理两列,比如说AB划分遇到NA值

B有一些"NA"行。我试图这样:

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

但它没有工作。任何帮助,将不胜感激。

+0

尝试用'np.nan'替换'NA' – MedAli

回答

0

我想你需要更换NA字符串NaNmissing value),然后使用div与参数fill_value用于替换到1为防止NaNanother answer

df['ratio']= df['A'].div(df['B'].replace('NA', np.nan).astype(float), fill_value=1) 

样品:

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   
+0

谢谢你的详细答案,我试了一下,它的工作! – user3062229

+0

很高兴能帮助,美好的一天! – jezrael

0

您只需用np.nan更换 'NA',对,你可以尝试:

df = df.fillna(np.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 
>>>