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

