Python处理DataFrame嵌套列表:提取子列表首尾元素并展平
处理嵌套列表DataFrame:保留子列表首尾元素并展平
刚学Python遇到多层嵌套的DataFrame确实容易头大,咱们一步步来拆解这个需求:你需要把names列里的每一层嵌套列表,先提取最内层子列表的首尾元素拼成字符串,再把这些字符串整理成新的列表。
第一步:先明确需求对应的逻辑
拿你的示例数据来说:
- 原数据里的第一个元素
[['harry','james','potter'],['Albus','Dumbledore']]- 第一个子列表
['harry','james','potter']取首尾→'harry potter' - 第二个子列表
['Albus','Dumbledore']取首尾→'Albus Dumbledore' - 最终整理成
['harry potter','Albus Dumbledore']
- 第一个子列表
第二步:写一个处理单个嵌套列表的函数
我们可以先定义一个小函数,专门处理每一行的嵌套列表:
def process_nested_list(nested_item): result = [] # 遍历每个中间层的列表(比如每个[name组]) for sub_list in nested_item: # 取子列表的第一个和最后一个元素,用空格连接 first_last = f"{sub_list[0]} {sub_list[-1]}" result.append(first_last) return result
这里用sub_list[-1]取最后一个元素,不管子列表长度是2还是3都能用,非常灵活~
第三步:用pandas的apply方法批量处理整列
接下来就可以把这个函数应用到DataFrame的names列上:
import pandas as pd # 你的示例DataFrame df1 = pd.DataFrame({'names':[[['harry','james','potter'],['Albus','Dumbledore']],[['Peter','D.','Griffin'],['some','nice','string']]]}) # 处理整列,生成新的结果列 df1['processed_names'] = df1['names'].apply(process_nested_list) # 查看结果 print(df1['processed_names'])
运行结果
你会得到完全符合预期的输出:
0 [harry potter, Albus Dumbledore] 1 [Peter Griffin, some string] Name: processed_names, dtype: object
额外小提示
如果想直接替换原列,直接写df1['names'] = df1['names'].apply(process_nested_list)就可以了,不用新建列。另外,要是你想把字符串的首字母大写(比如示例里的Harry Potter),可以把拼接的那行改成:
first_last = f"{sub_list[0].capitalize()} {sub_list[-1].capitalize()}"
这样就能得到首字母大写的规范结果啦~
内容的提问来源于stack exchange,提问作者user11638654
相关产品推荐
相关产品推荐

