如何堆叠多列值构建Python DataFrame的单列?
问题根因
原有代码输出多列NaN矩阵的核心原因是:每次np.transpose(df_1d.loc[[x]])生成的DataFrame的列名是df_1d的行索引值,两次循环生成的DataFrame列名不一致,append操作会自动按列名对齐,缺少的列就会填充NaN,最终生成多列的二维矩阵。
方案1:用列表中转(最推荐,性能最高)
核心逻辑是先把所有值存到普通Python列表中,最后一次性转为单列DataFrame,避免频繁操作DataFrame带来的性能损耗和对齐问题。
代码示例:
import pandas as pd import numpy as np # 初始化空列表存储值 res = [] for x in range(2): # 取出对应行的单个值加入列表 res.append(df_1d.loc[x].item()) # 列表转为单列DataFrame,可自定义列名 A_count_css = pd.DataFrame(res, columns=['your_column_name'])
方案2:直接操作DataFrame(需统一列名)
如果坚持用DataFrame堆叠,需要保证每次append的DataFrame列名完全一致,同时加上ignore_index=True重置行索引:
代码示例:
A_count_css = pd.DataFrame() for x in range(2): # 生成固定列名的单行DataFrame d_t = pd.DataFrame([df_1d.loc[x].item()], columns=['your_column_name']) A_count_css = A_count_css.append(d_t, ignore_index=True)
注:pandas 2.0及以上版本已经废弃
DataFrame.append方法,推荐使用pd.concat替代,实现逻辑如下:
df_list = [] for x in range(2): df_list.append(pd.DataFrame([df_1d.loc[x].item()], columns=['your_column_name'])) A_count_css = pd.concat(df_list, ignore_index=True)
额外优化提示
如果你的需求只是从10行1列的df_1d中取指定行生成新的单列DataFrame,不需要写循环,直接切片即可实现:A_count_css = df_1d.iloc[:2].reset_index(drop=True)
内容的提问来源于stack exchange,提问作者Fakhar Haider
相关产品推荐
相关产品推荐

