使用Pandas从CSV提取符合条件字符串并写入TXT遇问题求助
解决Pandas提取CSV指定列并写入TXT的问题
1. 先确认CSV数据的真实状态
加载数据后,先排查列的数据类型和实际值格式,很多筛选失败都是因为类型不匹配或值有隐藏空格:
import pandas as pd df = pd.read_csv("your_file.csv") # 查看列类型、非空值数量 print(df.info()) # 查看前5行实际数据 print(df.head()) # 查看目标列的所有唯一值,确认你要匹配的内容是否存在 print(df["目标列名"].unique())
2. 解决首次筛选得到空Series的问题
空Series通常是这两个原因:
- 数据类型不匹配:比如你用字符串匹配数值列,或者数值列里混了字符串(比如
"-")导致判断失效。 - 值有隐藏空格:比如单元格值是
" 符合条件 ",直接用== "符合条件"会匹配失败。
对应解决代码:
# 处理字符串列的空格问题 df["目标列名"] = df["目标列名"].str.strip() # 如果列里有"-"这类非数值标记,先转成可判断的格式(比如转数值型) df["数值列名"] = pd.to_numeric(df["数值列名"].replace("-", pd.NA), errors="coerce") # 重新筛选,比如筛选目标列等于"指定值"的行 filtered_df = df[df["目标列名"] == "指定值"] # 或者筛选数值列大于100的行 filtered_df = df[df["数值列名"] > 100]
3. 解决仅能提取含“-”行的问题
你修改后只拿到含"-"的行,大概率是把筛选条件误写成了判断是否包含"-"(比如用了str.contains("-"))。正确的逻辑应该是:先处理"-"(比如转成NaN排除,或替换成有效数值),再用你的真实条件筛选。
示例:假设需求是score列不小于60("-"表示缺考,不纳入):
# 把"-"替换成NaN,转成数值型 df["score"] = pd.to_numeric(df["score"].replace("-", pd.NA), errors="coerce") # 筛选score>=60的行(自动排除NaN的缺考行) filtered_df = df[df["score"] >= 60]
4. 提取指定列拼接并写入TXT
筛选到正确数据后,拼接指定列并写入文件:
# 方式1:用str.cat拼接两列(注意非字符串列要转类型) filtered_df["拼接结果"] = filtered_df["列1"].str.cat(filtered_df["列2"].astype(str), sep=" | ") # 方式2:用apply自定义拼接格式 filtered_df["拼接结果"] = filtered_df.apply(lambda row: f"ID: {row['id']} | 名称: {row['name']}", axis=1) # 写入TXT,每行一个结果 # 方法1:用to_csv,关闭索引和表头 filtered_df["拼接结果"].to_csv("output.txt", index=False, header=False, encoding="utf-8") # 方法2:用open逐行写入,更灵活 with open("output.txt", "w", encoding="utf-8") as f: for line in filtered_df["拼接结果"]: f.write(line + "\n")
调试小技巧
每次筛选后打印filtered_df.shape,看是否有符合条件的行数;打印filtered_df.head(),确认筛选出的行是否正确,避免逻辑错误。
内容的提问来源于stack exchange,提问作者softcoded
相关产品推荐
相关产品推荐

