如何将DataFrame最后一行填充至另一DataFrame对应空列?
问题:将df2最后一行数据填充到df1指定空列
用户尝试用.update()方法将df2的最后一行数据填充到df1的q、w、e空列,但未达到预期效果,需要正确实现方式。
原始代码
import pandas as pd d1 = { 'a': [10], 'b': [20], 'c': [30], 'q': "", 'w': "", 'e': "" } df1 = pd.DataFrame(d1) print(df1) d2 = { 'q': [7,40], 'w': [8,50], 'e': [9,60] } df2 = pd.DataFrame(d2) print(df2) last_row = df2.tail(1) print(last_row)
预期结果
result = { 'a': [10], 'b': [20], 'c': [30], 'q': [40], 'w': [50], 'e': [60] } df_result = pd.DataFrame(result) print(df_result)
原因分析
.update()方法未生效的核心原因:
- df1中
q、w、e列的空值是字符串空值"",而非pandas识别的缺失值(如NaN),.update()仅会替换缺失值; - df2最后一行的索引是
1,而df1的索引是0,索引不匹配导致无法对应替换。
正确实现方法
方法1:直接列赋值(最简单高效)
提取df2最后一行的数值,直接赋值给df1的对应列:
import pandas as pd d1 = { 'a': [10], 'b': [20], 'c': [30], 'q': "", 'w': "", 'e': "" } df1 = pd.DataFrame(d1) d2 = { 'q': [7,40], 'w': [8,50], 'e': [9,60] } df2 = pd.DataFrame(d2) # 提取最后一行转为Series,再转成二维数组匹配df1的行数 last_row_vals = df2.iloc[-1].values.reshape(1, -1) df1[['q', 'w', 'e']] = last_row_vals print(df1)
方法2:修正索引与缺失值后使用.update()
如果坚持使用.update(),需要先统一索引并将空字符串转为缺失值:
import pandas as pd d1 = { 'a': [10], 'b': [20], 'c': [30], 'q': "", 'w': "", 'e': "" } df1 = pd.DataFrame(d1) d2 = { 'q': [7,40], 'w': [8,50], 'e': [9,60] } df2 = pd.DataFrame(d2) # 将df1的空字符串转为pandas缺失值 df1[['q', 'w', 'e']] = df1[['q', 'w', 'e']].replace("", pd.NA) # 重置df2最后一行的索引,与df1保持一致 last_row = df2.tail(1).reset_index(drop=True) # 执行更新 df1.update(last_row) # 将列转回整数类型 df1[['q', 'w', 'e']] = df1[['q', 'w', 'e']].astype(int) print(df1)
内容的提问来源于stack exchange,提问作者Dan
相关产品推荐
相关产品推荐

