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

含NaN的数值矩阵转字母矩阵并合并行的技术实现问题

搞定含NaN的数字矩阵转字母序列问题

嘿,我来帮你解决这个问题!你现在有个带NaN值的DataFrame,要把1-15的数字转成对应字母(1→a,2→b…),然后每行合并成字符串,还要忽略NaN对吧?原来的代码遇到NaN报错是因为NaN是浮点类型,chr()函数不认它,咱们来改改就行。

先明确需求和问题重现

先把你的示例数据再理一遍:

import pandas as pd
import numpy as np

np.random.seed(1)
A = pd.DataFrame(np.random.randint(1,16,10).reshape(2,5))
A.iloc[1,4] = np.NAN
# 输出的A是:
#    0   1   2   3     4
# 0   6  12  13   9  10.0
# 1  12   6   1   1   NaN

你想要的最终结果是每行有效字母拼接成字符串:

0
0  flmij
1   lfaa

两种可行的解决方案

方案一:逐行过滤NaN再转换

直接对每行数据先筛掉NaN,再把剩下的数字转成字母拼接,逻辑很直观:

def process_row(row):
    # 只保留非NaN的元素,转成整数后转字母,最后拼接
    return ''.join(chr(int(num) + 96) for num in row if pd.notna(num))

# 把函数应用到每行,生成结果DataFrame
result = pd.DataFrame(A.apply(process_row, axis=1), columns=['0'])
print(result)

方案二:先转字母再拼接(把NaN转空字符串)

先把每个元素处理成字母或者空字符串,再直接拼接每行,空字符串不影响结果:

# 转换每个元素:数字转字母,NaN转空字符串
converted_df = A.applymap(lambda x: chr(int(x)+96) if pd.notna(x) else '')
# 每行拼接成字符串
result = pd.DataFrame(converted_df.agg(''.join, axis=1), columns=['0'])
print(result)

为啥原来的代码会报错?

原来的A.applymap(lambda n: chr(n + 96))里,遇到NaN的时候,n是浮点型的nan,chr()需要整数参数,所以就触发了TypeError。咱们的解决方案要么先过滤NaN,要么把NaN转成空字符串,都避开了这个问题。

这两种方法都能得到你想要的结果,选哪个看你觉得哪个更顺手就行~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:19:45