我有2個數據框df_1
和df_2
。兩者都有一個索引datetimecode
這是一個pd.datetime64
對象和temp
列。我想遍歷df_1
,並用'df_2'
中的相應溫度替換所有的NaN溫度值。條件性替換熊貓數據框中的對象
事情是這樣的:
for index, row in df_1.iterows():
row['temp'] = df_2[index]['temp'] if row['temp'] ==np.nan
但這是無效的語法時才
我有2個數據框df_1
和df_2
。兩者都有一個索引datetimecode
這是一個pd.datetime64
對象和temp
列。我想遍歷df_1
,並用'df_2'
中的相應溫度替換所有的NaN溫度值。條件性替換熊貓數據框中的對象
事情是這樣的:
for index, row in df_1.iterows():
row['temp'] = df_2[index]['temp'] if row['temp'] ==np.nan
但這是無效的語法時才
IIUC
df_1.fillna(df_2, inplace=True)
或
df_1.loc[df_1.temp.isnull(), 'temp'] = df_2.temp
示範
tidx = pd.date_range('2016-03-31', periods=5)
df_1 = pd.DataFrame(dict(temp=[1, np.nan, 3, np.nan, 5]), tidx)
df_2 = pd.DataFrame(dict(temp=np.arange(11, 16)), tidx)
df_1.fillna(df_2)
df_1.loc[df_1.temp.isnull(), 'temp'] = df_2.temp
df_1
這是你在找什麼:
df_1 = pd.DataFrame({'temp': [1,2,3,np.nan,5,np.nan,7]})
temp
0 1.0
1 2.0
2 3.0
3 NaN
4 5.0
5 NaN
6 7.0
df_2 = pd.DataFrame({'temp': [8,9,10,11,12,13,14]})
temp
0 8
1 9
2 10
3 11
4 12
5 13
6 14
df_1.temp.fillna(df_2['temp'], inplace=True)
temp
0 1.0
1 2.0
2 3.0
3 11.0
4 5.0
5 13.0
6 7.0
temp
0 8
1 9
2 10
3 11
4 12
5 13
6 14
@Brian好吧,我們都明顯在同一時間回答。相隔只需幾秒鐘... –
謝謝@Brian - 對不起,我不能接受這兩個答案! – doctorer
我已經實現了網絡連接第一種方法,並且在'df_1.fillna'聲明中有一個錯誤,它聲明'pandas.indexes.base.InvalidIndexError' 錯誤是不一致的 - 它取決於選擇的時間段,但是我看不到任何導致它的東西。 ..... – doctorer
...實際上,運行相同數據時,錯誤是完全間斷的,並且顯然是隨機的 - 所以看起來這種解決方案存在一些不穩定性? – doctorer
那麼好...我給你兩個解決方案的好東西;-)我正在研究警告。這是一個令人不安的問題 – piRSquared