【关于vd已完成订单信息和补邮信息的合并脚本】纯水,自己按需改,主打能跑就行

import pandas as pd
import re

# 读取两个CSV文件
def read_csv(file_path, encoding='gbk'):
    try:
        return pd.read_csv(file_path, encoding=encoding)
    except FileNotFoundError:
        print(f"文件未找到:{file_path}")
        return None
    except UnicodeDecodeError:
        print(f"编码错误,无法读取文件:{file_path}")
        return None

# 提取订单编号
def extract_order_id(row):
    # 使用正则表达式匹配订单编号
    match = re.search(r'\d+', str(row['你的部分']))
    if match:
        return match.group()
    return None

# 合并两个表格
def merge_tables(supplemental_df, original_df, supplemental_key, original_key):
    if supplemental_df is None or original_df is None:
        print("无法合并表格,因为至少有一个DataFrame是空的。")
        return None

    # 提取订单编号、不一定是订单编号,看你自己的csv里写的是啥
    supplemental_df['订单编号'] = supplemental_df.apply(extract_order_id, axis=1)

    # 检查订单编号列是否为空
    if supplemental_df['订单编号'].dropna().empty:
        print("没有有效的订单编号可以用于合并。")
        return None

    # 将两个表格中的键值列转换为字符串类型以确保匹配
    supplemental_df['订单编号'] = supplemental_df['订单编号'].astype(str)
    original_df[original_key] = original_df[original_key].astype(str)

    # 根据订单编号合并两个表格
    merged_df = pd.merge(
        supplemental_df,
        original_df,
        left_on='订单编号',
        right_on=original_key,
        how='inner'
    )
    return merged_df

# 重命名列名,添加“来自补邮”,这个是我的补邮表格信息名称
def rename_columns(df, supplemental_df, postfix):
    new_columns = {}
    for column in df.columns:
        if column in supplemental_df.columns and column != '订单编号':
            new_columns[column] = f"{column}{postfix}"
        else:
            new_columns[column] = column
    df.rename(columns=new_columns, inplace=True)

# 合并相同地址的信息
def combine_duplicates(df):
    # 检查 '收货人' 列是否存在
    if '收货人' not in df.columns:
        print("DataFrame中不存在 '收货人' 列。")
        return df

    # 按收货人分组,并将商品名称和商品数量合并为列表
    result_df = df.groupby('收货人').agg({
        '商品名称': lambda x: list(x),
        '商品数量': lambda x: list(x),
        '手机号码': 'first',  # 假设每个地址只有一个手机号码
    }).reset_index()

    return result_df

# 导出新的CSV文件
def export_csv(df, file_path, encoding='gbk'):
    if df is not None and not df.empty:
        df.to_csv(file_path, index=False, encoding=encoding)
        print(f"文件已成功导出到:{file_path}")
    else:
        print("没有数据可以导出。")

# 主函数
def main():
    # 定义文件路径
    path_supplemental = r'你的部分'
    path_original = r'你的部分'
    path_output = r'你的部分'

    # 读取CSV文件
    supplemental_df = read_csv(path_supplemental)
    original_df = read_csv(path_original)

    if supplemental_df is None or original_df is None:
        return  # 如果任一DataFrame为空,则退出程序

    # 合并表格,确保列名正确
    supplemental_key = '你的部分'
    original_key = '你的部分'
    merged_df = merge_tables(supplemental_df, original_df, supplemental_key, original_key)

    if merged_df is not None:
        # 重命名补邮表格的列名
        rename_columns(merged_df, supplemental_df, '来自补邮')

        # 合并相同地址的信息
        merged_df = combine_duplicates(merged_df)

        # 导出新的CSV文件
        export_csv(merged_df, path_output)

if __name__ == '__main__':
    main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值