师遇到NA值

时间:2017-08-29 13:36:29

标签: python pandas

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

Col B中有一些"NA"行。我正在尝试这个:

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

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

2 个答案:

答案 0 :(得分:0)

我认为您需要将NA字符串替换为NaNmissing value),然后将div与参数fill_value一起使用以替换为1阻止another answer中的NaN

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

如果没有NaNNA值:

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           

答案 1 :(得分:0)

您只需要将{NA'替换为np.nan,您可以尝试:

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