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

