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()