python列表的嵌套_Python中关于列表嵌套列表的处理
在處理列表的時候我們經(jīng)常會遇到列表中嵌套列表的結(jié)構(gòu),如果我們要把所有元素放入一個新列表,或者要計算所有元素的個數(shù)的話應(yīng)該怎么做呢?
第一個例子
對于上圖中的這樣一組數(shù)據(jù),如果我們要知道這個CSV文件中所有演員的數(shù)量(同一個人只能出現(xiàn)一次)應(yīng)該怎么做呢?
在pandas中我們可以先取Actors這一列,但是取出來之后我們會發(fā)現(xiàn)這是一個列表中嵌套列表的結(jié)構(gòu),要想將所有元素提取出來我們可以使用兩個for循環(huán)來解決這一問題。代碼如下:
# 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())
# 導(dǎo)演的人數(shù)(下面兩個操作達(dá)到的效果是一樣的)
print(len(set(df["Director"].tolist())))
print(len(df["Director"].unique()))
# 獲取演員的人數(shù)
temp_list = df["Actors"].str.split(", ").tolist()
# 將列表套列表轉(zhuǎn)為單列表
actors_list = [i for j in temp_list for i in j]
# set函數(shù)是對列表作集合操作,可以去重
print(len(set(actors_list)))
第二個例子
我們再來看第二組例子,還是上圖中的數(shù)據(jù),如果我們想要統(tǒng)計各個分類的電影的數(shù)量,應(yīng)該怎么做呢?核心思想是:
先處理列表嵌套列表,將所有的分類統(tǒng)計出來;
建立一個值全為0的數(shù)組,這個數(shù)組的行數(shù)等于電影數(shù),列數(shù)等于分類數(shù);
在這個數(shù)組的列方向上進(jìn)行求和,得出結(jié)果。
# 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)
# 新建臨時列表,將數(shù)組中分類列讀取
temp_list = df["Genre"].str.split(",").tolist()
# 處理列表嵌套列表的結(jié)構(gòu),去除重復(fù)元素
Genre_list = set([i for j in temp_list for i in j])
# 新建一個統(tǒng)計數(shù)組,即上文所說的第二步
a = pd.DataFrame(np.zeros((df.shape[0], len(Genre_list))), columns=Genre_list, dtype=int)
# 賦值,將上述列表中對應(yīng)的位置的值變?yōu)?
for i in range(len(temp_list)):
a.loc[i, temp_list[i]] = 1
# 求和,統(tǒng)計每個分類的電影的數(shù)量
sum = a.sum(axis=0)
sum = sum.sort_values(ascending=False)
# 繪制條形統(tǒng)計圖
_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()
結(jié)果如圖:
這里有一個重要的問題,如果原始數(shù)據(jù)的行數(shù)特別多,再采用for循環(huán)進(jìn)行行遍歷就會耗費特別長的時間
解決辦法見這里的第三個例子。
總結(jié)
以上是生活随笔為你收集整理的python列表的嵌套_Python中关于列表嵌套列表的处理的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python四大高阶函数_详谈Pytho
- 下一篇: python组成三位无重复数字_Pyth