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

第一个例子

对于上图中的这样一组数据,如果我们要知道这个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)))

第二个例子

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

  1. 先处理列表嵌套列表,将所有的分类统计出来;
  2. 建立一个值全为0的数组,这个数组的行数等于电影数,列数等于分类数;
  3. 在这个数组的列方向上进行求和,得出结果。
# 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循环进行行遍历就会耗费特别长的时间

解决办法见这里的第三个例子。

Python中关于列表嵌套列表的处理的更多相关文章

  1. python中字典排序,列表中的字典排序

    python中字典排序,列表中的字典排序 一.使用python模块:operator import operator #首先要导入模块operator x = {1:2, 3:4, 4:3, 2:1, ...

  2. Python中元祖,列表,字典的区别

    Python中有3种內建的数据结构:列表.元祖和字典: 1.列表 list是处理一组有序项目的数据结构,即你可以在一个列表中存储一个序列的项目. 列表中的项目应该包括在方括号中,这样Python就知道 ...

  3. Python中的两种列表

    python中有两种类型的列表:其中一种是用[]创建的列表,这种列表具有伸缩性,可以动态改变,而另外一种列表是用()创建,成为元组,元组一旦创建,在任何状况下都不能再改变,是一种常量列表. movie ...

  4. python中sorted方法和列表的sort方法使用详解

    一.基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的. 排序,数字.字符串按照ASCII,中文按照unicode从小到大排序 ...

  5. python中sorted方法和列表的sort方法使用

    一.基本形式 列表有自己的sort方法,器对列表进行原值排序,既然是原址排序,那显然元组不可能拥有这个方法,因为元组是不可修改的. 排序,数字.字符串按照ASCII,中文按照unicode从小到大排序 ...

  6. python中的数组和列表

    ####转自:模式识别实验室主任   #环境win64+anaconda+python3.6 list & array (1)list不具有array的全部属性(如维度.转置等) 代码1: # ...

  7. 如何在python中把两个列表的各项分别合并为列表

    [ [a,b] for a,b in zip(list1,list2)] 生成一个以列表list1,list2各项合并列表为元素的列表

  8. python中强大优雅的列表推导表达式

    推导表达式其实就是简化一些循环判断操作等 生成一个数字1-10的列表,可以有多少种方法? >>> l = [ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ] > ...

  9. python中range函数与列表中删除元素

    一.range函数使用 range(1,5)   代表从1到4(不包含5),结果为:1,2,3,4   ,默认步长为1 range(1,5,2)   结果为:1, 3  (同样不包含5) ,步长为2 ...

随机推荐

  1. robotframework RF使用中需要安装的工具和库

    确保 Python 3.6.2 安装成功 安装 如下 RF使用中需要的工具和库 1. RF 在两个Python中安装 robotframework执行命令 pip install robotframe ...

  2. linux基础命令--groupmod 修改组定义

    描述 groupmod命令用于修改系统上的组定义. groupmod命令通过更改组数据库(the group database)里的相关条目来修改指定的组. 语法 groupmod [选项] GROU ...

  3. mysql(七)

    多表查询: 显示内连接: select 字段列表 from 表名1  inner  join 表名1 on  条件 * inner 可忽略 select * from student inner  j ...

  4. C++ STL学习之 空间配置器(allocator)

    众所周知,一般情况下,一个程序包括数据结构和相应的算法,而数据结构作为存储数据的组织形式,与内存空间有着密切的联系. 在C++ STL中,空间配置器便是用来实现内存空间(一般是内存,也可以是硬盘等空间 ...

  5. spring-data-mongodb中的MongoTemplate与MongoRepository

    springboot添加maven依赖 <dependency> <groupId>org.springframework.boot</groupId> <a ...

  6. Python3学习之路~9.2 操作系统发展史介绍、进程与线程区别、线程语法、join、守护线程

    一 操作系统发展史介绍 参考链接:http://www.cnblogs.com/alex3714/articles/5230609.html 二 进程与线程 进程: 对各种资源管理的集合 就可以称为进 ...

  7. ESP8266 RTOS SDK编译环境搭建

    前提条件 1. linux操作系统或者windows下的linux虚拟机或者OS X操作系统 2. 联网 下载 * [Mac](https://dl.espressif.com/dl/xtensa-l ...

  8. Python3.0科学计算学习之绘图(四)

    绘制三维图: mplot3d工具包提供了点.线.等值线.曲面和所有其他基本组件以及三维旋转缩放的三维绘图. 1.散点的三维数据图 from mpl_toolkits.mplot3d import ax ...

  9. PHP 以最快的方式判断字符串是否以某给定字符串开始

    好久没搞代码了,最近找工作,重操旧业,在整理以前写的框架的时候发现,之前的自动加载部分执行速度上还是有可优化空间的,就是如果类名是以 risen\ 开始的(我的框架中的类都在此命名空间下),那么可直接 ...

  10. 【错误总结1:unity StartCoroutine 报 NullReferenceException 错误】

    今天在一个项目中,写了一个单例的全局类,该类的作用是使用协程加载场景.但在StartCoroutine 这一步报了NullReferenceException 的错.仔细分析和搜索之后,得到错误原因. ...