我有一個大型資料框,其中包含缺少某些值的溫度測量值。這些值位于兩個單獨的列中,其中一個具有實際測量值 (TEMP),而另一列僅具有估計溫度 (TEMP_ESTIMATED)。
我正在嘗試創建一個新列,其中將這兩個值組合在一起,如果值存在(不是 NaN),則新列將具有實際測量值,否則新列將具有估計值。資料框示例以及我希望它如何處理 for 回圈。
我已經嘗試了許多不同的方法來做到這一點,但到目前為止,它們都沒有奏效。我還是編程新手,所以如果有一些明顯的錯誤,我深表歉意,只是想了解更多!
我上次嘗試的但未將值添加到新列中(我已經匯入了 pandas 并且所有溫度資料都保存到 data.DataFrame 中):
for i in range(len(data)):
if data.at[i, 'TEMP'] == 'NaN':
data.at[i, 'TEMP_ALL'] = data.at[i, 'TEMP_ESTIMATED']
else:
data.at[i, 'TEMP_ALL'] = data.at[i, 'TEMP']
我將非常感謝您對此或任何替代方法的任何反饋,以達到預期的結果,謝謝!
uj5u.com熱心網友回復:
您可以嘗試使用np.where:
import pandas as pd
import numpy as np
df = pd.DataFrame(data={'DATE': ['20100101', '20100102', '20100103', '20100104', '20100105'],
'TEMP': [np.nan, np.nan, np.nan, 15, 20],
'TEMP_ESTIMATED': [10, 15, 16, 17, 22]})
df = df.rename_axis('index')
df['TEMP_ALL'] = np.where(np.isnan(df.TEMP), df.TEMP_ESTIMATED, df.TEMP)
| 指數 | 日期 | 溫度 | TEMP_ESTIMATED | TEMP_ALL |
|---|---|---|---|---|
| 0 | 20100101 | 楠 | 10 | 10 |
| 1 | 20100102 | 楠 | 15 | 15 |
| 2 | 20100103 | 楠 | 16 | 16 |
| 3 | 20100104 | 15 | 17 | 15 |
| 4 | 20100105 | 20 | 22 | 20 |
如果您的 NaN 值是字串,請嘗試:
df['TEMP_ALL'] = np.where(df.TEMP == 'NaN', df.TEMP_ESTIMATED, df.TEMP)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/433565.html
下一篇:僅選擇pandas資料框的可用行
