You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python中字符串转浮点数速度慢,如何优化提速?

高效处理带格式问题的地理坐标字符串转换

核心优化思路:抛弃iterrows(),用Pandas矢量化操作

iterrows()是逐行迭代,每次迭代都会产生额外的对象开销,对于7000行数据来说完全没必要——Pandas的矢量化字符串方法是底层优化的,速度能提升几十甚至上百倍。

具体实现代码

针对你的坐标字符串格式(前导空格、正负号与数字间有空格),直接用字符串矢量化处理+类型转换:

import pandas as pd

# 假设你的DataFrame是df,包含'latitude'和'longitude'列
# 处理纬度列
df['latitude'] = df['latitude'].str.strip()  # 去除前后所有空格
df['latitude'] = df['latitude'].str.replace(r'(?<=[+-])\s', '', regex=True)  # 去掉正负号后的空格
df['latitude'] = pd.to_numeric(df['latitude'], errors='coerce')  # 转成浮点数,异常值转NaN

# 处理经度列同理
df['longitude'] = df['longitude'].str.strip().str.replace(r'(?<=[+-])\s', '', regex=True).astype(float)

为什么模拟数据快、实际数据慢?

  1. 脏数据影响:实际数据集可能存在空值、非标准格式(比如多余字符),iterrows()逐行处理时遇到异常会逐个抛出或处理,拖慢整体速度;而矢量化操作会批量处理,配合errors='coerce'能快速把异常值转成NaN,不影响整体效率。
  2. 迭代开销:iterrows()每次迭代都会生成一个Series对象,7000次迭代的累计开销远大于矢量化的一次性批量处理。

进阶提速:合并操作减少中间步骤

可以把字符串处理和类型转换合并成一行,减少DataFrame的中间修改操作,进一步提速:

df['latitude'] = pd.to_numeric(
    df['latitude'].str.strip().str.replace(r'(?<=[+-])\s', '', regex=True),
    errors='coerce'
)

验证异常数据

如果转换后有NaN,你可以快速定位异常行:

# 找出纬度转换失败的行
invalid_lat_rows = df[df['latitude'].isna()]
print(invalid_lat_rows['latitude'])

内容的提问来源于stack exchange,提问作者brosenheim

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 18:37:50