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

如何交换pandas Series中每个非NaN元素的前两个字符?

解决Pandas Series交换元素前两个字符的问题

给定Pandas Series:

import pandas as pd
import numpy as np

A = pd.Series([3223, np.nan, np.nan, np.nan, np.nan, 2323, 3323, 2449, np.nan])

需要交换非NaN元素的前两位数字,得到目标结果:[2323, NaN, NaN, NaN, NaN, 3223, 3323, 4249, NaN],可以通过以下两种方法实现:

方法一:自定义函数处理

先将Series元素转为字符串,通过自定义函数交换前两位字符,再转回数值类型:

def swap_first_two(s):
    if s == 'nan':
        return np.nan
    # 交换前两位,拼接剩余字符
    return s[1] + s[0] + s[2:]

# 执行处理
A_processed = A.astype(str).apply(swap_first_two).astype(float)

方法二:正则表达式替换(更简洁)

利用Pandas的str.replace结合正则表达式,直接匹配并交换前两位字符,再恢复NaN值:

# 用正则替换前两位,再把字符串'nan'转回np.nan
A_processed = A.astype(str).str.replace(r'^(.)(.)(.*)$', r'\2\1\3', regex=True)
A_processed = A_processed.replace('nan', np.nan).astype(float)

验证结果:

print(A_processed)

输出符合预期:

0    2323.0
1       NaN
2       NaN
3       NaN
4       NaN
5    3223.0
6    3323.0
7    4249.0
8       NaN
dtype: float64

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 23:45:37