我有一個數據框,我需要處理兩列,比如說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