处理DataFrame中含多样数值单位的列转换问题
解决DataFrame去除百分号的AttributeError问题及格式转换方案
错误原因
你遇到的AttributeError: 'str' object has no attribute 'str',本质是误用了Pandas的Series方法:.str是专为Series对象设计的字符串处理接口,但apply会把DataFrame列的单个元素(这里是字符串)传入自定义函数,直接对字符串操作即可,不需要再加.str。
完整解决方案
1. 读取目标文件
import pandas as pd df = pd.read_csv('ForEx.csv')
2. 编写适配单个元素的转换函数
针对actual列的混合格式(含百分号、纯数值等),写一个能统一转换为数值格式的函数:
def format_actual_value(val): # 统一转为字符串处理,兼容列内混合类型 val_str = str(val).strip() # 处理带百分号的情况:去除百分号后转浮点数,再除以100转为小数 if '%' in val_str: try: return float(val_str.replace('%', '')) / 100 except ValueError: return pd.NA # 处理纯数值或其他可转换格式 else: try: return float(val_str) except ValueError: return pd.NA
3. 生成转换后的CNactual列
用apply将函数作用到actual列的每个元素:
df['CNactual'] = df['actual'].apply(format_actual_value)
扩展说明
- 如果
actual列还有其他格式(比如带千分位逗号、货币符号),可以在函数里添加对应替换逻辑,比如val_str.replace(',', '') - 返回
pd.NA是为了标记无效值,方便后续用df.dropna()或df.fillna()处理
内容的提问来源于stack exchange,提问作者Leo Torres
相关产品推荐
相关产品推荐

