python嵌套列表操作_Python中关于列表嵌套列表的处理

在处理列表的时候我们经常会遇到列表中嵌套列表的结构,如果我们要把所有元素放入一个新列表,或者要计算所有元素的个数的话应该怎么做呢?

第一个例子

对于上图中的这样一组数据,如果我们要知道这个CSV文件中所有演员的数量(同一个人只能出现一次)应该怎么做呢?

在pandas中我们可以先取Actors这一列,但是取出来之后我们会发现这是一个列表中嵌套列表的结构,要想将所有元素提取出来我们可以使用两个for循环来解决这一问题。代码如下:

# encoding = utf-8

import pandas as pd

file_path = "d:/learning/pandas/IMDB-Movie-Data.csv"

df = pd.read_csv(file_path)

print(df.head(1))

# 读平均评分

print(df["Rating"].mean())

# 导演的人数(下面两个操作达到的效果是一样的)

print(len(set(df["Director"].tolist())))

print(len(df["Director"].unique()))

# 获取演员的人数

temp_list = df["Actors"].str.split(", ").tolist()

# 将列表套列表转为单列表

actors_list = [i for j in temp_list for i in j]

# set函数是对列表作集合操作,可以去重

print(len(set(actors_list)))

第二个例子

我们再来看第二组例子,还是上图中的数据,如果我们想要统计各个分类的电影的数量,应该怎么做呢?核心思想是:

先处理列表嵌套列表,将所有的分类统计出来;

建立一个值全为0的数组,这个数组的行数等于电影数,列数等于分类数;

在这个数组的列方向上进行求和,得出结果。

# coding=utf-8

import pandas as pd

import numpy as np

from matplotlib import pyplot as plt

file_path = "~/桌面/IMDB-Movie-Data.csv"

df = pd.read_csv(file_path)

# 新建临时列表,将数组中分类列读取

temp_list = df["Genre"].str.split(",").tolist()

# 处理列表嵌套列表的结构,去除重复元素

Genre_list = set([i for j in temp_list for i in j])

# 新建一个统计数组,即上文所说的第二步

a = pd.DataFrame(np.zeros((df.shape[0], len(Genre_list))), columns=Genre_list, dtype=int)

# 赋值,将上述列表中对应的位置的值变为1

for i in range(len(temp_list)):

a.loc[i, temp_list[i]] = 1

# 求和,统计每个分类的电影的数量

sum = a.sum(axis=0)

sum = sum.sort_values(ascending=False)

# 绘制条形统计图

_x = sum.index

_y = sum.values

plt.figure(figsize=(20, 8), dpi=80)

plt.yticks(range(max(sum.values)+50)[::50])

plt.bar(_x, _y)

plt.show()

结果如图:

这里有一个重要的问题,如果原始数据的行数特别多,再采用for循环进行行遍历就会耗费特别长的时间

原文:https://www.cnblogs.com/dereen/p/list_in_list.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值