我有一个数据框,我需要处理两列,比如说A
和B
。划分遇到NA值
列B
有一些"NA"
行。我试图这样:
df['ratio']= (df['A']/loan_data_df['B'].astype(int)).where(loan_data_df['B']!= 'NA')
但它没有工作。任何帮助,将不胜感激。
我有一个数据框,我需要处理两列,比如说A
和B
。划分遇到NA值
列B
有一些"NA"
行。我试图这样:
df['ratio']= (df['A']/loan_data_df['B'].astype(int)).where(loan_data_df['B']!= 'NA')
但它没有工作。任何帮助,将不胜感激。
我想你需要更换NA
字符串NaN
(missing value),然后使用div
与参数fill_value
用于替换到1
为防止NaN
像another 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
谢谢你的详细答案,我试了一下,它的工作! – user3062229
很高兴能帮助,美好的一天! – jezrael
您只需用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
>>>
尝试用'np.nan'替换'NA' – MedAli