2017-08-29 53 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 
>>>