1.字符串离散化(统计电影分类)
import pandas as pd
import numpy as np
file_pat = "./IMDB-Movie-Data.csv"
df = pd.read_csv(file_path)
#统计分类的列表
temp_list=df["Genre"].str.split(",").tolist()
genre_list = list(set([i for j in temp_list for i in j]))
#构建全为0的数组
zero_df = pd.DataFrame(np.zeros(df.shape[0],len(genre_list))),columns=genre_list)
#给每个电影出现分类的位置赋值1
for i in range(df.shape[0]):
zeros_df.loc[i,temp_list[i]] = 1
#print(zers_df.head(3))
#每个分类的电影的数量和
genre_count = zeros_df.sum(axis=0)
print(genre_count)
#排序
genre_count = genre_count.sort_values()
_x=genre_count.index
_y=genre_count.values
#画图
plt.figure(figsize(20,8),dpi=80)
plt.bar(range(len(_x))),_y)
plt.xticks(range(len(_x)),_x)
plt.show()
2.数据合并
join:把行索引相同的数据合并在一起
import pandas as pd
df1 = pd.DataFrame(np.ones(2,4),index=["A","B"],colunms=list("abcd"))
df2 = pd.DataFrame(np.ones(3,3),index=["A","B","C"],colunms=list("xyz"))
df1.join(df2)
df2.join(df1)
merge:把列索引相同的数据合并在一起
df3 = pd.DataFrame(np.zeros((3,3)),columns=list("fax"))
df1.merge(df3,on="a) #按照a进行合并
df3.loc[1,"a"] = 1
#内连接
df1.merge(df3,on="a)
#外连接
df1.merge(df3,on="a,how="outer") #对应补齐
df1.merge(df3,on="a,how="left") #显示df1
df1.merge(df3,on="a,how="right") #显示df3
3.数据的分组聚合
星巴克店铺数量统计
import pandas as pd
import numpy as np
file_path="./starbucks_store_worldwide.csv"
pd.read_csv(file_path)
grouped = df.groupby(by="Country")
#可以进行遍历
for i,j in grouped:
print(i)
print(j,type(j))
df[df["Country"]]="US"
#调用聚合方法
country_count = grouped["Brand"].count()
print(country_count["US"])
print(country_count["CN"])
#统计中国各个省份星巴克的数量
china_data = df[df["Country"] == "CN"]
grouped = china_data.groupby(by="State/Provice").count()["Brand"]
print(grouped)
#对国家和省份同时进行分组
grouped = china_data.groupby(by=[df["Country"],df["State/Province"]]).count()["Brand"]
#数据按照多个条件进行分组,返回Seeries
df["Brand"].grouped(by=[df["Country"],df["Country"]])
#数据按照多个条件进行分组,返回DataFrame
grouped = df[["Brank"]].grouped(by=[df["Country"],df["Country"]])
#取1列,两个[]可以取DataFrame
4.数据的索引
#索引的方法和树形
group1 = df[["Brank"]].grouped(by=[df["Country"],df["Country"]])
df1.index = ["a","b"] #重新赋值
df1.reindex("a","f") #对df重新取,有就有,没有就NaN
df1.set_index("a") #把a这一列变成索引
df1.set_index("a").index
df1.set_index("a",drop=False) #仍然保留a
df1.set_index("b").index #索引可以是重复的
df1.set_index("b").index.unique()
len(df1.set_index("b").index.unique())
df1.set_index(["a","b"]) #设置两个索引
df1.set_index(["a","b","d"],drop=False) #设置3个索引
5.通过索引取值
a = pd.DataFrame({'a':range(7),'b':range(7,0,-1),'c':['one','one','one','two','two','two','two'],'d':list("hjklmno")})
b=a.set_index(["c","d"])
c["one"]["j"]
c["one"]
d = a.set_index(["d","c"])["a"]
d.swaplevel()["one"]
b.loc["one"].loc["h"]
b.swaplevel().loc["h"] #从内层进行选取dataframe loc取 series 两个方括号进行取
#店铺总数排名前10的国家
import pandas as pd
import numpy as np
file_path="./starbucks_store_worldwide.csv"
df = pd.read_csv(file_path)
#准备数据
data1 = df.groupby(by="Country").count()["Brand"].sort_values(ascending=False)[:10]
_x = data1.index
_y = data1.values
#画图
plt.figure(figsize=(20,8),dpi=80)
plt.bar(range(len(_x),_y))
plt.xticks(range(len(_x),_x))
plt.show()
#中国每个城市的店铺数量
import pandas as pd
import numpy as np
file_path="./starbucks_store_worldwide.csv"
df = pd.read_csv(file_path)
df = df[df["Country"]=="CN"]
#准备数据
data1 = df.groupby(by="City").count()["Brand"].sort_values(ascending=False)[:50]
_x = data1.index
_y = data1.values
#画图
plt.figure(figsize=(20,12),dpi=80)
plt.bar(range(len(_x),_y),width=0.3,color="orange")
plt.xticks(range(len(_x),_x))
plt.show()
#全球排名靠前的10000本书的数据
#不同年份书的数量
import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
file_path = "./books.csv"
df = pd.read_csv(file_path)
#删除缺失字段
data1 = df.[pd.notnull(df["original_publication_year"])]
grouped = data1.groupby(by="original_publication_year").count()["title"]
#不同年份书的平均评分情况
#去除nan的行
data1 = df.[pd.notnull(df["original_publication_year"])]
grouped = data1["average_rating"].groupby(by=data1[original_publication_year]).mean()
print(grouped)
_x = grouped.index
_y = grouped.values
plt.figure(figsize=(20,8),dpi=80)
plt.plot(range(len(_x)),_y)
plt.xticks(range(len(_x)))[::10],_x[::10].astype(int),ratation=45))
plt.show()