使用 for 循环将现有列中的数据添加到 pandas.DataFrame 中的新列
Add data to a new column in pandas.DataFrame from existing columns using for-loop
我有一个大型数据框,其中包含缺少某些值的温度测量值。这些值位于两个单独的列中,其中一个包含实际测量值 (TEMP),而另一列仅包含估计温度 (TEMP_ESTIMATED)。
我正在尝试创建一个新列,其中这 2 个值的组合方式是,如果该值存在(不是 NaN),新列将具有实际测量值,否则新列将具有估计值。 Example of dataframe and how I would want it to look after the for-loop.
我已经尝试了很多不同的方法来做到这一点,但 none 目前为止它们都有效。我还是编程的新手,所以如果有一些明显的错误,我深表歉意,只是想学习更多!
我上次试过但值没有添加到新列(我已经导入 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']
我将不胜感激任何对此的反馈或如何实现预期结果的任何替代方法,谢谢!
您可以尝试使用 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)
index
DATE
TEMP
TEMP_ESTIMATED
TEMP_ALL
0
20100101
nan
10
10
1
20100102
nan
15
15
2
20100103
nan
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)
我有一个大型数据框,其中包含缺少某些值的温度测量值。这些值位于两个单独的列中,其中一个包含实际测量值 (TEMP),而另一列仅包含估计温度 (TEMP_ESTIMATED)。
我正在尝试创建一个新列,其中这 2 个值的组合方式是,如果该值存在(不是 NaN),新列将具有实际测量值,否则新列将具有估计值。 Example of dataframe and how I would want it to look after the for-loop.
我已经尝试了很多不同的方法来做到这一点,但 none 目前为止它们都有效。我还是编程的新手,所以如果有一些明显的错误,我深表歉意,只是想学习更多!
我上次试过但值没有添加到新列(我已经导入 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']
我将不胜感激任何对此的反馈或如何实现预期结果的任何替代方法,谢谢!
您可以尝试使用 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)
index | DATE | TEMP | TEMP_ESTIMATED | TEMP_ALL |
---|---|---|---|---|
0 | 20100101 | nan | 10 | 10 |
1 | 20100102 | nan | 15 | 15 |
2 | 20100103 | nan | 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)