Python中关于列表嵌套列表的处理
在处理列表的时候我们经常会遇到列表中嵌套列表的结构,如果我们要把所有元素放⼊⼀个新列表,或者要计算所有元素的个数的话应该怎么做呢?python怎么读csv数据
第⼀个例⼦
对于上图中的这样⼀组数据,如果我们要知道这个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. 在这个数组的列⽅向上进⾏求和,得出结果。
结果如图:
这⾥有⼀个重要的问题,如果原始数据的⾏数特别多,再采⽤for循环进⾏⾏遍历就会耗费特别长的时间
解决办法见的第三个例⼦。# 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.s((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.bar(_x, _y)
plt.show()
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论