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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:36:26