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

如何从Pandas DataFrame的字符串列表中提取前3个元素?

从Pandas DataFrame的字符串列表列中提取前3个元素

需要从Pandas DataFrame(df_unique)的'1/1'列中,提取字符串列表的前3个元素,该DataFrame结构如下:

1/1                                                             0/0  count
0              ['P1-12', 'P1-22', 'P1-25', 'P1-26', 'P1-28', 'P1-6', 'P1-88', 'P1-93']                            ['P1-89', 'P1-90', 'P1-92', 'P1-95']      1
1              ['P1-12', 'P1-22', 'P1-25', 'P1-26', 'P1-6', 'P1-89', 'P1-92', 'P1-95']                                     ['P1-28', 'P1-90', 'P1-93']      1
2    ['P1-12', 'P1-22', 'P1-25', 'P1-26', 'P1-88', 'P1-89', 'P1-92', 'P1-93', 'P1-95']                                      ['P1-28', 'P1-6', 'P1-90']      1
3             ['P1-12', 'P1-22', 'P1-25', 'P1-26', 'P1-88', 'P1-89', 'P1-92', 'P1-93']                                      ['P1-28', 'P1-6', 'P1-90']      1

尝试过的无效方案

  • 方案1:

    df_extract_3 = df_unique['1/1'].str.split().map(lambda lst: [string[0:3] for string in lst])
    

    结果:

    0           [['P, 'P1, 'P1, 'P1, 'P1, 'P1, 'P1, 'P1]
    1           [['P, 'P1, 'P1, 'P1, 'P1, 'P1, 'P1, 'P1]
    2      [['P, 'P1, 'P1, 'P1, 'P1, 'P1, 'P1, 'P1, 'P1]
    3           [['P, 'P1, 'P1, 'P1, 'P1, 'P1, 'P1, 'P1]
    
  • 方案2:

    df_extract_3 = df_unique['1/1'].str[0:3]
    

    结果:

    0      ['P
    1      ['P
    2      ['P
    3      ['P
    
  • 方案3:

    df_extract_3 = df_unique['1/1'].str.split().str[0:3]
    

    结果:

    0      [['P1-12',, 'P1-22',, 'P1-25',]
    1      [['P1-12',, 'P1-22',, 'P1-25',]
    2      [['P1-12',, 'P1-22',, 'P1-25',]
    3      [['P1-12',, 'P1-22',, 'P1-25',]
    

期望输出

0      ['P1-12', 'P1-22', 'P1-25']
1      ['P1-12', 'P1-22', 'P1-25']
2      ['P1-12', 'P1-22', 'P1-25']
3      ['P1-12', 'P1-22', 'P1-25']

解决方案

问题核心是'1/1'列中的内容是字符串形式的列表,不是原生的Python列表对象,所以需要先将字符串解析为真实列表,再提取前3个元素。

方法1:解析后修改原列再提取

import ast
# 将字符串形式的列表转换为真实列表
df_unique['1/1'] = df_unique['1/1'].apply(ast.literal_eval)
# 提取每个列表的前3个元素
df_extract_3 = df_unique['1/1'].str[:3]

方法2:不修改原列,直接提取

import ast
df_extract_3 = df_unique['1/1'].apply(lambda x: ast.literal_eval(x)[:3])

两种方法都能得到符合预期的结果。之前的错误方案都是直接对字符串进行操作,没有将其转换为真实列表,因此无法正确提取列表元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 12:07:05