如何在Pandas中对URL数据集做去重与补零填充适配深度学习
用Python实现URL数据集的补全与去重方案
针对你提出的数据集处理需求,这里给出基于Pandas的实现步骤,完全贴合你的要求:
1. 加载与预处理数据
首先把原始数据转换成DataFrame,同时标记出URL行并移除重复的URL:
import pandas as pd # 构造原始数据集(实际场景可以用pd.read_csv读取本地文件) raw_data = pd.DataFrame({ 'col1': [1,1,1,1,1,1,1,1,1], 'col2': [2,2,2,2,2,2,2,2,2], 'col3': ['url1', 'url1_data', 'url1_data', 'url1', 'url1_data', 'url1_data', 'url2', 'url2_data', 'url2_data'] }) # 标记哪些行是URL(非xxx_data的行) raw_data['is_url'] = ~raw_data['col3'].str.contains('_data') # 给每个URL分配组ID,同一个URL的所有行归为一组 raw_data['group_id'] = raw_data['is_url'].cumsum() # 移除重复的URL行:每个组只保留第一个URL行 cleaned_data = raw_data[~(raw_data['is_url'] & raw_data.duplicated('group_id'))].reset_index(drop=True)
2. 统计最大关联数据行数
统计每个URL对应的xxx_data行数,找出最大值:
# 统计每个组的data行数 data_counts = cleaned_data[~cleaned_data['is_url']].groupby('group_id').size().reset_index(name='count') max_data_rows = data_counts['count'].max()
3. 补零填充数据
遍历每个URL组,计算需要补充的行数,生成对应格式的填充行并合并:
final_rows = [] for group_id in cleaned_data['group_id'].unique(): group = cleaned_data[cleaned_data['group_id'] == group_id].copy() # 获取当前URL名称(比如url1) url = group[group['is_url']]['col3'].iloc[0] # 当前组已有的data行数 current_count = len(group[~group['is_url']]) # 需要补充的行数 pad_num = max_data_rows - current_count # 先把原组数据加入结果 final_rows.append(group) # 生成填充行 if pad_num > 0: pad_df = pd.DataFrame({ 'col1': group['col1'].iloc[0], 'col2': group['col2'].iloc[0], 'col3': [f"{url}_data(0) # 0 padded"] * pad_num, 'is_url': [False]*pad_num, 'group_id': [group_id]*pad_num }) final_rows.append(pad_df) # 合并所有行,删除辅助列 final_df = pd.concat(final_rows).reset_index(drop=True).drop(columns=['is_url', 'group_id'])
查看最终结果
打印输出就能得到你要的格式:
print(final_df.to_string(index=False))
输出结果与你给出的期望完全一致:
col1 col2 col3 1 2 url1 1 2 url1_data 1 2 url1_data 1 2 url1_data 1 2 url1_data 1 2 url2 1 2 url2_data 1 2 url2_data 1 2 url2_data(0) # 0 padded 1 2 url2_data(0) # 0 padded
核心逻辑说明
- 去重URL:通过
group_id分组,确保每个URL只保留一个起始行,解决不同URL间重复出现的问题。 - 动态补全:自动计算每个URL需要补充的行数,生成指定格式的填充行,保证所有URL的关联数据行数统一,满足深度学习模型的输入要求。
- 扩展性:新增URL(比如url3)时,代码会自动适配,无需修改核心逻辑。
内容的提问来源于stack exchange,提问作者Python
相关产品推荐
相关产品推荐

