无法将DataFrame选中列的值追加至已有DataFrame问题求助
问题原因与修复方案
核心问题:列名不匹配
你把selected_columns_a转成values再重建DataFrame时,设置了columns=None,这会让新生成的DataFrame列名变成默认的0、1、2。而你的df_b列名应该和df_a的前3列不一致,导致append时因为列名不匹配,所有数据都无法对应到df_b的列里,最终全是NaN;用concat时则会因为列名不同,直接新增3列。
修复代码
完全不需要把数据转成values再重建DataFrame,直接用筛选后的selected_columns_a就行,它本身就保留了原有的列名:
# 直接筛选df_a的前3列,保留原列名 selected_columns_a = df_a.iloc[:, 0:3] # 直接append,列名匹配就不会出问题 df_b = df_b.append(selected_columns_a, ignore_index=True) print(df_b)
循环里的注意事项
如果是在循环中使用,注意每次append前确保selected_columns_a的列名和df_b完全一致,另外可以提前初始化df_b的列名和df_a前3列一致,比如:
# 初始化df_b,确保列名和df_a前3列一致 df_b = pd.DataFrame(columns=df_a.columns[:3]) # 循环内操作 for ...: selected_columns_a = df_a.iloc[:, 0:3] df_b = df_b.append(selected_columns_a, ignore_index=True)
另外注意:pandas 2.0+里append方法已经被弃用,如果你用的是高版本pandas,循环里可以用列表暂存数据,最后一次性concat,效率更高:
temp_list = [] for ...: selected_columns_a = df_a.iloc[:, 0:3] temp_list.append(selected_columns_a) # 最后合并所有数据 df_b = pd.concat(temp_list, ignore_index=True)
内容的提问来源于stack exchange,提问作者GISGUY
相关产品推荐
相关产品推荐

