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

求助:使用Pandas读取两个文件并整合捐赠数据至单个Excel

解决方案:合并用户列表与捐赠数据

需求回顾

需要将全量用户名列表与捐赠记录整合,生成包含所有用户名及对应捐赠额(无记录则填0或空)的单一Excel文件。

修改后的完整代码

from bs4 import BeautifulSoup
import pandas as pd
                          
names= "member_info.txt"
donations=  "donations.txt"

user_names = []
donation_user_names = []
user_amounts = []

# 读取并解析全量用户名文件
with open(names, 'r') as file:
    html_content_names = file.read()
name_soup = BeautifulSoup(html_content_names, 'html.parser')
name_rows = name_soup.find_all('div', class_='rank_row')
for name_row in name_rows:
    user_name = name_row.find('span', class_='username').text
    user_names.append(user_name)

# 读取并解析捐赠记录文件
with open(donations, 'r') as file:
    html_content_donations = file.read()
donation_soup = BeautifulSoup(html_content_donations, 'html.parser')
donation_name_rows = donation_soup.find_all('div', class_='rank_row')
for donation_name_row in donation_name_rows:
    donation_user_name = donation_name_row.find('span', class_='username').text
    user_amount = donation_name_row.find('div', class_='amount plus')['data-sort']
    donation_user_names.append(donation_user_name)
    user_amounts.append(user_amount)

# 构建全量用户DataFrame
df_users = pd.DataFrame({'Username': user_names})
# 构建捐赠记录DataFrame并处理金额格式
df_donations = pd.DataFrame({'Username': donation_user_names, 'Amount in M': user_amounts})
df_donations['Amount in M'] = df_donations['Amount in M'].astype(float).apply(lambda x: round(x/1000000, 1))

# 关键:左连接合并两个DataFrame,保留所有用户名
merged_df = df_users.merge(df_donations, on='Username', how='left')
# 将无捐赠记录的用户金额填充为0(若需要空值可改为:merged_df['Amount in M'] = merged_df['Amount in M'].fillna(''))
merged_df['Amount in M'] = merged_df['Amount in M'].fillna(0)

# 按用户名排序(不区分大小写)
merged_df = merged_df.sort_values(by='Username', ascending=True, key=lambda col: col.str.lower())

# 导出到单一Excel文件
output_excel = "combined_donations.xlsx"
merged_df.to_excel(output_excel, index=False)

print(f"合并数据已写入 {output_excel}")

核心步骤说明

  • 数据合并:使用merge方法的how='left'参数,以全量用户列表为基准,保留所有用户名并匹配对应捐赠记录,确保不会丢失任何用户信息。
  • 缺失值处理:用fillna(0)将无捐赠记录的用户金额设为0,若需要空值展示,替换为fillna('')即可。
  • 统一排序:合并完成后再统一对用户名排序,避免分开排序导致的数据错位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 07:19:52