You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将DataFrame的append代码改写为pd.concat适配新版Python?

用pd.concat替代DataFrame.append的等价实现方案

原代码通过循环调用DataFrame.append生成目标结构,但新版Pandas已移除该方法。以下是两种符合新版规范的改写方式,逻辑与原代码完全一致:

方式一:先收集数据列表再生成DataFrame(更高效)

import pandas as pd
import numpy as np

def new_df(df):
    PayItem = ['E01', 'E40', 'E41', 'E42']
    # 提取前28行核心数据
    employee_data = df.loc[0:27, ['Employee Number', 'Working Hours', 
                                  'Product Commissions', 'Membership Commissions', 'Tips']]
    
    rows_list = []
    for _, row in employee_data.iterrows():
        # 为当前员工生成4条记录并加入列表
        rows_list.extend([
            {'Key': row['Employee Number'], 'PayItem': PayItem[0], 'Hours': row['Working Hours'], 'Dollars': np.nan},
            {'Key': row['Employee Number'], 'PayItem': PayItem[1], 'Hours': ' ', 'Dollars': row['Product Commissions']},
            {'Key': row['Employee Number'], 'PayItem': PayItem[2], 'Hours': ' ', 'Dollars': row['Membership Commissions']},
            {'Key': row['Employee Number'], 'PayItem': PayItem[3], 'Hours': ' ', 'Dollars': row['Tips']}
        ])
    
    # 批量生成DataFrame
    return pd.DataFrame(rows_list)

方式二:用pd.concat合并小DataFrame(严格对应concat替换append的需求)

import pandas as pd
import numpy as np

def new_df(df):
    PayItem = ['E01', 'E40', 'E41', 'E42']
    employee_data = df.loc[0:27, ['Employee Number', 'Working Hours', 
                                  'Product Commissions', 'Membership Commissions', 'Tips']]
    
    dfs_collect = []
    for _, row in employee_data.iterrows():
        # 为单个员工创建包含4行的小DataFrame
        single_emp_df = pd.DataFrame([
            {'Key': row['Employee Number'], 'PayItem': PayItem[0], 'Hours': row['Working Hours'], 'Dollars': np.nan},
            {'Key': row['Employee Number'], 'PayItem': PayItem[1], 'Hours': ' ', 'Dollars': row['Product Commissions']},
            {'Key': row['Employee Number'], 'PayItem': PayItem[2], 'Hours': ' ', 'Dollars': row['Membership Commissions']},
            {'Key': row['Employee Number'], 'PayItem': PayItem[3], 'Hours': ' ', 'Dollars': row['Tips']}
        ])
        dfs_collect.append(single_emp_df)
    
    # 一次性合并所有小DataFrame
    return pd.concat(dfs_collect, ignore_index=True)

改写说明

  • 两种方式均避免了原代码中循环append的低效操作,符合新版Pandas的最佳实践。
  • 完全保留原逻辑:每个员工生成4条对应PayItem的记录,仅E01行保留实际工作时长,其余Hours字段为空格,Dollars对应nan、产品佣金、会员佣金、小费。

内容的提问来源于stack exchange,提问作者ACesar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 20:02:43