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

如何用Python提取字段纯数字及处理CSV的Cabin列

问题1:如何使用Python将包含字母和数字的字段转换为仅保留数字?

如果是处理pandas DataFrame中的列,最简洁高效的方式是借助正则表达式提取数字:

import pandas as pd

# 假设你的数据存储在df中,目标列名为'mixed_column'
df['only_numbers'] = df['mixed_column'].str.extract(r'(\d+)', expand=False)
# 可选:将提取出的字符串转为数值类型
df['only_numbers'] = pd.to_numeric(df['only_numbers'], errors='coerce')

str.extract(r'(\d+)')会匹配字段中连续的数字序列,返回第一个匹配结果。如果需要提取所有分散的数字(比如X1Y2Z3要得到123),可以用替换法删掉非数字字符:

df['all_numbers'] = df['mixed_column'].str.replace(r'\D', '', regex=True)

如果是处理单个字符串(不用pandas),用列表推导式也很直观:

def extract_all_digits(s):
    return ''.join(char for char in s if char.isdigit())

# 示例
print(extract_all_digits('A23B45'))  # 输出 '2345'

问题2:处理CSV中的Cabin列(保留字母、替换NOCABIN为0)

看了你写的部分代码,先修正两个小问题:一是判断条件里应该用==而非=(你写成了赋值操作);二是dataset['Cabin'] < 'B'的逻辑不适用,我们需要提取所有字母部分,不管是A、B还是其他字母开头的值。

下面是完整的实现方案(基于pandas,适配你的CSV场景):

import pandas as pd

# 读取CSV文件,假设full_set是包含DataFrame的列表(和你的代码结构一致)
full_set = [pd.read_csv('your_file.csv')]

for dataset in full_set:
    # 第一步:将NOCABIN替换为0
    dataset['Cabin'] = dataset['Cabin'].replace('NOCABIN', 0)
    
    # 第二步:提取其他值中的字母部分
    # 方法一:自定义函数+apply,逻辑清晰易读
    def get_cabin_letters(value):
        if value == 0:
            return 0
        # 转为字符串后提取所有字母字符
        return ''.join([c for c in str(value) if c.isalpha()])
    
    dataset['Cabin'] = dataset['Cabin'].apply(get_cabin_letters)
    
    # 方法二:用str.extract更高效(推荐处理大数据集)
    # 先转字符串,提取连续字母序列,空值(原0转字符串后无字母)填充为0
    # dataset['Cabin'] = dataset['Cabin'].astype(str)
    # dataset['Cabin'] = dataset['Cabin'].str.extract(r'([A-Za-z]+)', expand=False)
    # dataset['Cabin'] = dataset['Cabin'].fillna(0)

两种方法的处理效果一致,比如:

原始Cabin值处理后的值
AA
B34B
NOCABIN0
C123DCD

方法一适合新手理解,方法二利用pandas内置字符串方法,处理大文件时效率更高。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:30:45