如何从DataFrame数组列提取元素并按空格拆分取首项?
处理DataFrame数组列提取首个元素的方案
需求
对包含数组格式数据的DataFrame列input做如下处理:
- 跳过数组中的
null值 - 对每个非
null的字符串元素,按空格拆分后提取第一个有效元素 - 将提取出的元素用逗号连接;若数组仅含
null,则输出null
示例
输入(input列各行数据)
[None,'ABC TGF FDSERV',' GHD FGVCF TR UYF'] [None,'GTR ygvv',' HYTR FGVF','GTF BGHY GHYN'] [None] [None,'GTY DFERFT GHU FRTG']
输出
ABC,GHD GTR,HYTR,GTF null GTY
代码实现
用Pandas的apply方法结合自定义函数完成处理:
import pandas as pd # 构造示例DataFrame df = pd.DataFrame({ 'input': [ [None,'ABC TGF FDSERV',' GHD FGVCF TR UYF'], [None,'GTR ygvv',' HYTR FGVF','GTF BGHY GHYN'], [None], [None,'GTY DFERFT GHU FRTG'] ] }) # 定义处理函数 def extract_first_elements(arr): # 筛选出非null的元素 valid_strings = [s for s in arr if s is not None] if not valid_strings: return 'null' # 对每个字符串按空格拆分取第一个元素 first_parts = [s.split()[0] for s in valid_strings] # 用逗号连接结果 return ','.join(first_parts) # 生成结果列 df['output'] = df['input'].apply(extract_first_elements) # 查看结果 print(df['output'].tolist())
说明
s.split()[0]会自动忽略字符串开头的连续空格,提取第一个非空的单词,匹配示例中的输出逻辑- 若需要保留字符串开头的空格(比如
' HYTR FGVF'提取为' HYTR'),可以改用s.split(' ', 1)[0],但注意开头全是空格的字符串会提取为空字符串
内容的提问来源于stack exchange,提问作者ADF-Learner
相关产品推荐
相关产品推荐

