使用tqdm构建[244,14]特征DataFrame时输出维度为[1,14]如何解决
问题原因
你的代码里rows.append(row_data)的缩进位置错误,被放在了for循环的外部。这就导致程序只会在整个for循环遍历完所有行后,仅把最后一次循环生成的row_data加入列表,最终生成的特征DataFrame自然只有1行。
修复方案
方案1:修正原代码缩进
将rows.append(row_data)调整缩进,放到for循环内部即可,修正后的代码如下:
import pandas as pd from tqdm import tqdm rows=[] for _, row in tqdm(df.iterrows(),total=df.shape[0]): row_data=dict( week_of_year=row.date.week, month=row.date.month, NGTC=row.NGTC, NGRRO=row.NGRRO, CSP=row.CSP, NGMP=row.NGMP, NGPI=row.NGPI, NGUSV=row.NGUSV, HOSP=row.HOSP, HDD=row.HDD, CDD=row.CDD, NGSP=row.NGSP, pre_NGSP=row.pre_NGSP, change_NGSP=row.change_NGSP ) rows.append(row_data) # 生成特征DataFrame features_df = pd.DataFrame(rows)
运行后features_df.shape就会是你预期的(244,14)。
方案2:更高效的向量化实现(推荐)
iterrows遍历的效率很低,对于你的需求完全可以用pandas原生的向量化操作实现,无需循环,代码更简洁运行速度也更快:
features_df = pd.DataFrame({ "week_of_year": df["date"].dt.week, "month": df["date"].dt.month, "NGTC": df["NGTC"], "NGRRO": df["NGRRO"], "CSP": df["CSP"], "NGMP": df["NGMP"], "NGPI": df["NGPI"], "NGUSV": df["NGUSV"], "HOSP": df["HOSP"], "HDD": df["HDD"], "CDD": df["CDD"], "NGSP": df["NGSP"], "pre_NGSP": df["pre_NGSP"], "change_NGSP": df["change_NGSP"] })
内容的提问来源于stack exchange,提问作者ibrahim
相关产品推荐
相关产品推荐

