Python:去除DataFrame/列表中的括号及重复字符串问题
解决CSV列提取与DataFrame格式异常问题
核心问题拆解
- 列内容包含括号,未做清洗导致格式混乱
- 循环逻辑错误:要么append位置错误只生成单行,要么循环中错误添加整个序列导致嵌套重复
分步解决方案
1. 直接提取目标列(避免冗余循环)
优先用pandas原生索引提取,不用手动拼接列表:
import pandas as pd # 读取CSV文件 raw_df = pd.read_csv("你的文件路径.csv") # 直接提取指定两列生成新DataFrame target_df = raw_df[["arrive time", "standby time"]].copy()
2. 批量清理括号内容
根据需求选择清理方式:
- 如果只是移除所有括号及内部内容:
# 清理arrive time列 target_df["arrive time"] = target_df["arrive time"].str.replace(r"\(.*?\)", "", regex=True).str.strip() # 清理standby time列 target_df["standby time"] = target_df["standby time"].str.replace(r"\(.*?\)", "", regex=True).str.strip()
- 如果需要提取
standby time括号内的数字转为数值:
target_df["standby time"] = target_df["standby time"].str.extract(r"\((\d+)\)", expand=False).astype(float)
3. 修复循环逻辑(若必须用循环)
如果特殊场景需要循环处理,注意每次循环处理单条数据,append放在循环内:
arrive_data = [] standby_data = [] # 遍历每行数据 for _, row in raw_df.iterrows(): # 清理arrive time并去重 clean_arrive = row["arrive time"].replace(r"\(.*?\)", "", regex=True).strip() if clean_arrive not in arrive_data: arrive_data.append(clean_arrive) # 提取standby time的数值 clean_standby = row["standby time"].str.extract(r"\((\d+)\)")[0] standby_data.append(float(clean_standby)) # 转换为DataFrame final_df = pd.DataFrame({"arrive time": arrive_data, "standby time": standby_data})
4. 处理重复字符串问题
如果提取后存在重复行,直接去重:
target_df = target_df.drop_duplicates(subset=["arrive time"], keep="first")
验证结果
执行完上述步骤后,用print(target_df.head())检查输出,确保每行对应单个时间值和数值型待机时间,无括号、无嵌套重复。
内容的提问来源于stack exchange,提问作者Felipe Abrão Mariotti
相关产品推荐
相关产品推荐

