如何无需指定列即可清除Pandas读取CSV文件时的所有多余空格
可行修改方案
修改思路
- 编写通用的空格清理函数,仅处理字符串类型的值,保留数字、日期等非字符串类型数据不变,无需提前指定列,适配任意CSV文件
- 清理逻辑:先去除字符串首尾空格,再将中间连续的多个空格替换为单个空格
- 读取CSV后对整个DataFrame全局应用清理函数,再转换为OrderedDict输出
完整代码
import re import pandas as pd from collections import OrderedDict def clean_extra_spaces(val): # 仅对字符串类型做空格处理,其他类型直接返回 if isinstance(val, str): # 先删首尾空格,再将中间连续多空格替换为单空格 return re.sub(r'\s+', ' ', val.strip()) return val file = input("Input any csv file or file path \nYour input: ") df = pd.read_csv(file) # 全局清理所有元素的多余空格 df = df.applymap(clean_extra_spaces) for i, row in df.iterrows(): d = OrderedDict(zip(row.index.tolist(), row.tolist())) print(d)
效果验证
使用你提供的示例DataFrame运行代码,输出结果与期望输出完全一致:
OrderedDict([('First Name', 'Kate'), ('Last Name', 'Rose')]) OrderedDict([('First Name', 'Tim'), ('Last Name', 'John son')]) OrderedDict([('First Name', 'James'), ('Last Name', 'House')])
问题解决说明
这个方案覆盖了你之前遇到的所有问题:
- 无需手动指定字符串类型列,自动识别处理字符串,适配任意CSV文件
- 不需要修改
pd.read_csv的sep参数,不会出现数据变为None的问题 - 同时处理首尾空格、中间连续多倍空格,满足所有空格清理需求
内容的提问来源于stack exchange,提问作者PypypieYum
相关产品推荐
相关产品推荐

