如何正确对pandas超长代码行换行以符合PEP8规范
Pandas代码符合PEP8行宽要求的换行方案
PEP8要求单行代码长度不超过80字符,pandas的索引选择、链式调用、多参数函数类长行,优先在成对括号内部自然续行,不需要加反斜杠续行,换行后保持统一缩进即可,具体处理方式如下:
- 索引筛选类长行拆分
对loc/iloc这类带两个参数的索引操作,直接在逗号位置拆分参数,每个参数单独占一行缩进对齐即可。针对示例里的超长列筛选行,最直接的改法:
df_ndsi_feature = df_stations_date.loc[ :, df_stations_date.columns.str.fullmatch("ndsi_avg-\\d") ] ndsi_feature = df_ndsi_feature.to_numpy( dtype=np.float32 ).T df_ndvi_feature = df_stations_date.loc[ :, df_stations_date.columns.str.fullmatch("ndvi_avg-\\d") ] ndvi_feature = df_ndvi_feature.to_numpy( dtype=np.float32 ).T
- 抽公共变量压缩重复长片段
示例中两次重复调用df_stations_date.columns属于冗余代码,提前把高频复用的对象存为短名变量,既能缩短行长度,也能降低后续维护的出错概率:
# 提前提取复用的列索引对象 station_cols = df_stations_date.columns df_ndsi_feature = df_stations_date.loc[ :, station_cols.str.fullmatch("ndsi_avg-\\d") ] ndsi_feature = df_ndsi_feature.to_numpy(dtype=np.float32).T df_ndvi_feature = df_stations_date.loc[ :, station_cols.str.fullmatch("ndvi_avg-\\d") ] ndvi_feature = df_ndvi_feature.to_numpy(dtype=np.float32).T
- 多参数函数、链式调用换行
多参数的函数调用(比如np.append),在每个参数间换行缩进即可;如果是多步的pandas链式操作,可以把整个逻辑包在一对圆括号里,每个链式方法单独占一行对齐,可读性更强:
# 多参数函数换行 ndsi_ndvi_feature = np.append( ndsi_feature, ndvi_feature, axis=1 ) date_features = np.append( date_features, ndsi_ndvi_feature, axis=1 ) # 长链式操作换行示例 ndsi_feature = ( df_stations_date .loc[:, station_cols.str.fullmatch("ndsi_avg-\\d")] .to_numpy(dtype=np.float32) .T )
注意:不要用反斜杠
\做续行标记,这种写法对尾部空格非常敏感,很容易触发语法错误,用括号包裹的自然续行是PEP8推荐的写法。
内容的提问来源于stack exchange,提问作者PEREZje
相关产品推荐
相关产品推荐

