Python Pandas:混合类型字符串转浮点数及注释行信息提取
针对你遇到的这个混合格式DataFrame处理需求,结合你使用的Python3.5.4和Pandas0.22.0环境,我整理了一套完整的解决方案,分步骤来实现:
1. 提取所有带注释的行信息
首先我们需要定位所有包含(n)格式注释的条目,把它们的行索引、所在列和注释内容提取出来,方便你后续判断是设为0还是NA。这里用正则表达式来匹配括号包裹的注释内容:
import pandas as pd import re # 构建贴近实际场景的示例DataFrame df = pd.DataFrame({ 'A': ['$104.64', '$73.04', '(4)', '25.5%', '(9)', '$0.00', '...'], 'B': ['(3)', '$56.78', '10%', '$123.45', '(7)', '...', '$99.99'] }) # 定义匹配注释的正则模式:捕获括号内的内容 comment_pattern = r'\((.+?)\)' comment_records = [] # 遍历每一列查找注释条目 for col in df.columns: # 筛选出当前列包含注释的行 has_comment = df[col].str.contains(comment_pattern, na=False) # 提取注释内容 comments = df[col].str.extract(comment_pattern, expand=False)[has_comment] # 获取对应的行索引 row_indices = df[has_comment].index # 把信息整理成字典存入列表 for idx, comment in zip(row_indices, comments): comment_records.append({ '行索引': idx, '列名': col, '注释内容': comment }) # 转换为DataFrame展示结果 comment_df = pd.DataFrame(comment_records) print("带注释的行详情:") print(comment_df)
运行这段代码后,你就能清晰看到所有需要手动判断处理的注释条目,方便后续调整数值转换规则。
2. 实现混合字符串转浮点数并保留原内容
接下来我们要把美元、百分比、注释等混合格式的字符串转换成浮点数,同时保留原始字符串方便核对。这里写一个自定义转换函数,适配你环境的特性:
def str_to_float(s): # 先判断是否是注释条目 comment_match = re.match(comment_pattern, str(s)) if comment_match: comment = comment_match.group(1) # 这里根据你的注释规则返回0或NaN,示例中假设注释'4'设为0,其他设为NaN if comment == '4': return 0.0 else: return pd.np.nan # 处理美元格式:去掉$后转浮点数 if isinstance(s, str) and s.startswith('$'): return float(s.replace('$', '')) # 处理百分比格式:去掉%后转浮点数再除以100 if isinstance(s, str) and s.endswith('%'): return float(s.replace('%', '')) / 100 # 处理省略号这类非数值内容 if s == '...': return pd.np.nan # 其他情况尝试直接转换,失败则返回NaN try: return float(s) except (ValueError, TypeError): return pd.np.nan # 为每一列添加原字符串列和转换后数值列(注意Python3.5不支持f-string,用字符串拼接) for col in df.columns: df[col + '_原字符串'] = df[col] df[col + '_转换后数值'] = df[col].apply(str_to_float) print("\n处理后的完整DataFrame:") print(df)
关键适配说明:
- 因为你用的是Pandas0.22.0,所以用
pd.np.nan表示缺失值(新版本的pd.NA在这个版本不支持)。 - Python3.5不支持f-string语法,所以列名用字符串拼接的方式生成,避免语法错误。
- 转换函数里的注释判断逻辑可以根据你的实际规则修改,比如不同注释对应不同的数值处理方式。
内容的提问来源于stack exchange,提问作者MCC
相关产品推荐
相关产品推荐

