如何交换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
相关产品推荐
相关产品推荐

