我有一个数据框,我需要处理两列,比如A
和B
。
Col B
中有一些"NA"
行。我正在尝试这个:
df['ratio']= (df['A']/loan_data_df['B'].astype(int)).where(loan_data_df['B']!= 'NA')
但它不起作用。任何帮助将不胜感激。
答案 0 :(得分:0)
我认为您需要将NA
字符串替换为NaN
(missing 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
如果没有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
答案 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
>>>