简化下列语句:for i in range(len(data2_0_time3)): if (np.isnan(data2_0_time3.iat[i,0])==True): if 3<=i<=len(data2_0_time3)-4: data2_0_time3.loc[i,'speed_391_24': 'speed_391_22'] = data2_0_time3.iloc[i-3:i,0:3].fillna(0).values.mean(axis=0) elif i>len(data2_0_time3)-4: cols = ['speed_391_24', 'speed_391_23', 'speed_391_22'] rolling_df = data2_0_time3.loc[:i][cols].rolling(window=3, min_periods=1) data2_0_time3.loc[i, cols] = rolling_df.mean().iloc[-1].values else: data2_0_time3.loc[i, ['speed_391_24', 'speed_391_23', 'speed_391_22']] = np.nan_to_num(data2_0_time3.iloc[max(i-3,0):i+1, [0,1,2]].rolling(window=4, min_periods=1).sum().iloc[-1]/min(i+1, 4))
时间: 2023-06-08 07:06:03 浏览: 149
简化上述语句的方法:
1. 使用缩写变量名代替较长的列名,以增加代码可读性。
2. 使用单个布尔表达式来检查 np.isnan 函数的返回值。
3. 在重复的代码块中使用函数或类以减少冗余代码。
4. 在处理列表时排除索引错误,并使用 min 函数以避免除以零的错误。
简化后的代码如下所示:
def func(data):
cols = ['speed_391_24', 'speed_391_23', 'speed_391_22']
for i in range(len(data)):
if np.isnan(data.iloc[i,0]):
if 3<=i<=len(data)-4:
data.loc[i,cols] = data.iloc[i-3:i,0:3].fillna(0).values.mean(axis=0)
elif i>len(data)-4:
rolling_df = data.loc[:i][cols].rolling(window=3, min_periods=1)
data.loc[i,cols] = rolling_df.mean().iloc[-1].values
else:
data.loc[i,cols] = np.nan_to_num(data.iloc[max(i-3,0):i+1,[0,1,2]].rolling(window=4, min_periods=1).sum().iloc[-1]/min(i+1,4))
阅读全文