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

如何在Pandas中提取多列非NaN文本前2字符并排序拼接生成新列?

没问题,这两个Pandas的操作我帮你拆解清楚:

问题1:从文本列提取前2个字符生成新列

Pandas的字符串处理工具非常贴心,提取前两个字符其实一行代码就能搞定——用Series的str属性配合切片[:2]就行,直接看例子:

import pandas as pd

# 创建示例DataFrame
df = pd.DataFrame({"text_col": ["Apple", "Banana", "Cherry", "Date"]})

# 生成新列,提取前2个字符
df["first_two_chars"] = df["text_col"].str[:2]

print(df)

运行后输出:

text_col first_two_chars
0    Apple              Ap
1   Banana              Ba
2   Cherry              Ch
3     Date              Da

如果你的列里混有非字符串类型(比如数字),可以先转成字符串避免报错:

df["first_two_chars"] = df["text_col"].astype(str).str[:2]
问题2:处理含"NaN"字符串的DataFrame生成目标列

首先要注意一个细节:你给出的Series里的'NaN'是字符串类型,不是Pandas默认识别的缺失值(np.nan),所以第一步得把这些假的'NaN'换成真的缺失值,不然过滤的时候会把它当成正常文本处理。接下来一步步实现:

import pandas as pd
import numpy as np

# 构建原始Series和DataFrame
a = pd.Series(['Eyes', 'Ear', 'Hair', 'Skin'])
b = pd.Series(['Hair', 'Liver', 'Eyes', 'NaN'])
c = pd.Series(['NaN', 'Skin', 'NaN', 'NaN'])

df = pd.concat([a, b, c], axis=1)
df.columns = ['First', 'Second', 'Third']

# 把字符串'NaN'替换为真正的缺失值np.nan
df = df.replace('NaN', np.nan)

# 定义处理每行的函数
def process_row(row):
    # 过滤掉NaN值,得到非空的文本列表
    non_nan_vals = row.dropna().tolist()
    # 对列表按字母排序
    sorted_vals = sorted(non_nan_vals)
    # 每个值取前2个字符,再拼接成结果
    result = ''.join([val[:2] for val in sorted_vals])
    return result

# 应用函数生成第四列
df['Combined'] = df.apply(process_row, axis=1)

print(df)

运行后输出:

First Second Third Combined
0   Eyes   Hair   NaN    EyHa
1    Ear  Liver  Skin    EaLiSk
2   Hair   Eyes   NaN    EyHa
3   Skin    NaN   NaN       Sk

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:04:11