Pandas读取含混合小数分隔符与整数的Excel文件问题求助
解决Pandas 1.3.4读取混合小数分隔符Excel的简洁方案
核心方案
先以文本格式读取存在数值格式问题的列,再通过自定义函数统一处理分隔符并转换为float类型,彻底规避Pandas自动类型推断的缺陷。
1. 定义通用数值转换函数
该函数可兼容纯整数、点分隔符小数、逗号分隔符小数三种场景,同时处理空值和异常值:
def convert_mixed_numeric(value): if pd.isna(value): return value s = str(value).strip() if not s: return pd.NA # 统一将逗号替换为点,对齐Pandas的小数识别规则 s = s.replace(',', '.') try: return float(s) except ValueError: # 无法转换的异常值可返回NA或原内容,根据业务需求调整 return pd.NA
2. 批量读取并处理Excel文件
import pandas as pd import glob # 替换为你的Excel文件路径匹配规则 excel_paths = glob.glob('./your_excel_files/*.xlsx') # 指定需要处理的目标列 target_columns = ['Unit selling price', 'Sales Amount'] processed_data = [] for path in excel_paths: # 强制目标列以字符串类型读取,避免Pandas自动识别出错 df = pd.read_excel(path, dtype={col: str for col in target_columns}) # 对每个目标列应用转换函数 for col in target_columns: df[col] = df[col].apply(convert_mixed_numeric) processed_data.append(df) # 按需合并所有处理后的表格(不需要可删除此行) final_df = pd.concat(processed_data, ignore_index=True)
关键细节说明
- 用
dtype参数指定目标列为字符串类型读取,避免Pandas将逗号分隔的数值识别为普通字符串、纯整数识别为int类型,导致后续处理不一致 - 转换函数通过统一替换分隔符,让所有数值格式对齐Pandas的float识别规则,纯整数会被正常转为带.0的float,不会丢失
- 异常捕获逻辑确保个别脏数据不会中断整个批量处理流程
内容的提问来源于stack exchange,提问作者Joe_M
相关产品推荐
相关产品推荐

