2020-11-22 数据科学库(5)数据的合并,聚合以及后处理

1411-李同学

发表文章数:148

热门标签

, ,
首页 » 数据科学库 » 正文

1、根据电影类别分类统计每个类别一共出现的电影次数

思路

  • 将所有电影类别筛选出来
    方法:
list1=df["category"].str.split(",").tolist()

此时得到的是一个大列表包含每一行信息,其中,每一行信息为一个小列表

  • 平铺嵌套列表
    方法:
list2=i for j in list1 for i in j
得到一个一维数组
  • 去重
    方法:
    list3 =list(set())
    所有电影类别都储存在了一个列表中
  • 构造一个全为0的数组
    方法:
zero_df=pd.Dataframe(np.zeros((df.shpae[0],len(list3))),columns=list3)
得到一个行为源数组行数,列数位电影类别数量和,列标签为电影类别的全为0的数组
  • 遍历,每一次出现一个类别加1
    方法:
for  i in range(df.shape[0]):
				zero_df.loc[i,temp_list[i]]=1
  • 最后根据需要进行数学统计。

代码

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
file_path=""

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))#展开 多余的会被set删除掉

#构造全为0的数组
zero_df=pd.DataFrame(np.zeros((df.shape[0],len(genre_list))),columns=genre_list)

#给每个电影出现分类的地方赋值,
for  i in range(df.shape[0]):
    zero_df.loc[i,temp_list[i]]=1 #把每一行出现的电影类别赋值为1

print(df.head(3))

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

sumone=zero_df.sum(axis=0) #把每个列方向的求和
print(sumone)

#排序
sumone=sumone.sort_values()

_x=sumone.index
_y=sumone.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
import numpy as np
df1=pd.DataFrame(np.ones((2,4)),index=["A","B"],columns=list("abcd"))

df2=pd.DataFrame(np.zeros((3,3)),index=["A","B","C"],columns=list("xyz"))

print(df1)
print(df2)
print("************************")
print(df1.join(df2)) #所有的行数以df1为准
print(df2.join(df1))
#按照行索引合并

2020-11-22 数据科学库(5)数据的合并,聚合以及后处理
2020-11-22 数据科学库(5)数据的合并,聚合以及后处理

根据列合并

#按照指定列合并
import pandas as pd
import numpy as np
df1=pd.DataFrame(np.ones((2,4)),index=["A","B"],columns=list("abcd"))
print(df1)
df2=pd.DataFrame(np.zeros((3,3)),index=["A","B","C"],columns=list("xyz"))

df3=pd.DataFrame(np.arange(9).reshape((3,3)),columns=list("fax"))
print(df3)
print("************")
print(df1.merge(df3,on="a")) #a列中的值不一样,取并集

#df3.loc[1,"a"]=1
df1.loc["A","a"]=100
print("************")
print(df1.merge(df3,on="a"))

print("************")
print(df1.merge(df3,on="a",how="outer")) #缺少的行用nan补齐,后面相同列的不相同数据会补在前一个数组的同名列的下面
print("************")
print(df1.merge(df3,on="a",how="left"))
print("************")
print(df1.merge(df3,on="a",how="right")) #以哪边的数组为准,生成的新数组的行数与为基准的数组的行数一样。
  • 两个数组
    2020-11-22 数据科学库(5)数据的合并,聚合以及后处理

  • inter(交集):根据两个数组a列中相同的值,打印出相同值锁在的行,对数组进行拼接
    2020-11-22 数据科学库(5)数据的合并,聚合以及后处理
    2020-11-22 数据科学库(5)数据的合并,聚合以及后处理

  • outer(并集):找到两个数组中a列下相同的值,其他的行与列补齐,没有的补nan
    2020-11-22 数据科学库(5)数据的合并,聚合以及后处理

  • left 以左边的数组为基准,搜索的列不相同的时候右边数组补nan
    2020-11-22 数据科学库(5)数据的合并,聚合以及后处理

  • -right 以右边数组为基准,搜索的列的值不相同的左边数组对应行补nan
    2020-11-22 数据科学库(5)数据的合并,聚合以及后处理

聚合方法

星巴克的数据处理

import pandas as pd
import numpy as np
file_path="./directory.csv"


df=pd.read_csv(file_path)

#print(df.head(1))
#print(df.info())

grouped=df.groupby(by="Country")
print(grouped)


#DataFrameGroupBy
#可以进行遍历
'''for i, j in grouped: #把不同的国家的数组拿出来单独分类,元组,第一个值是国家,第二个是一个dataframe
    print(i)
    print("*********************************")
    print(j)'''
#调用聚合方法
country_count=grouped["Brand"].count() #统计了每一列的数据
#比较中国和美国brand的数量
print(country_count)
print(country_count["US"])
print(country_count["CN"])

2020-11-22 数据科学库(5)数据的合并,聚合以及后处理

统计中国星巴克各省份的数量

import pandas as pd
import numpy as np
file_path="./directory.csv"


df=pd.read_csv(file_path)
china_data=df[df["Country"]=="CN"]
grouped=china_data.groupby(by="State/Province").count()["Brand"]
print(grouped)

2020-11-22 数据科学库(5)数据的合并,聚合以及后处理
2020-11-22 数据科学库(5)数据的合并,聚合以及后处理

多条件分组

#数据按照多个条件进行分组,返回dataframe
grouped=df["Brand"].groupby(by=[df["Country"],df["State/Province"]]).count()
print(grouped) #series类型,前面两列位索引

#返回dataframe
grouped1=df[["Brand"]].groupby(by=[df["Country"],df["State/Province"]]).count() #添加一个方括号
grouped2=df.groupby(by=[df["Country"],df["State/Province"]]).count()[["Brand"]]
grouped3=df.groupby(by=[df["Country"],df["State/Province"]])[["Brand"]].count()

print(grouped1,type(grouped1)) #dataframe格式

复合索引

2020-11-22 数据科学库(5)数据的合并,聚合以及后处理

series 类型


#可以重新赋值索引
#df.reindex
#df1.set_index("a") 指定某一列作为索引。drop=False:保留原有列.
# 返回index的唯一值,df.set_index("Country").index.unique()
# index可以求长度 ,列表转换
# 设置两个索引时,复合索引,将两个列的索引变为整体索引。

将c和d列作为ab数组的索引
2020-11-22 数据科学库(5)数据的合并,聚合以及后处理
取one,j对应的数据
2020-11-22 数据科学库(5)数据的合并,聚合以及后处理
取one的所有数据,用swaplevel将索引的level变换,在取c对应的索引和数据额
2020-11-22 数据科学库(5)数据的合并,聚合以及后处理

Dataframe类型

b.loc["one"].loc["h"]

或者两个方括号

练习:使用matplotlib呈现店铺排名总数前十的国家

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
file_path="./directory.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()

2020-11-22 数据科学库(5)数据的合并,聚合以及后处理

练习:使用matplotlib呈现中国每个城市店铺的数量

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import font_manager
file_path="./directory.csv"

myfont=font_manager.FontProperties(fname="C:/Windows/Fonts/msyh.ttc")
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,8),dpi=80)
plt.bar(range(len(_x)),_y,width=0.3,color="orange")
plt.xticks(range(len(_x)),_x,fontproperties=myfont,rotation=45)
plt.show()

2020-11-22 数据科学库(5)数据的合并,聚合以及后处理
2020-11-22 数据科学库(5)数据的合并,聚合以及后处理

10000份书中不同年份书的数量

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import font_manager
file_path="./books.csv"
myfont=font_manager.FontProperties(fname="C:/Windows/Fonts/msyh.ttc")
df=pd.read_csv(file_path)

#print(df.head(1))
#print(df.info())

data1=df[pd.notnull(df["original_publication_year"])] #筛选出不为nan的值

grouped=data1.groupby(by="original_publication_year").count()["title"][:25]

_x=grouped.index
_y=grouped.values

#画图
plt.figure(figsize=(20,12),dpi=80)
#plt.bar(range(len(_x)),_y,width=0.3,color="orange")
plt.barh(range(len(_x)),_y,height=0.3,color="orange")
plt.yticks(range(len(_x)),_x,fontproperties=myfont)
plt.show()

不同年份的书本的平均评分

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt
from matplotlib import font_manager
file_path="./books.csv"
#myfont=font_manager.FontProperties(fname="C:/Windows/Fonts/msyh.ttc")
df=pd.read_csv(file_path)

#print(df.head(1))
#print(df.info())

data1=df[pd.notnull(df["original_publication_year"])] #筛选出不为nan的值

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(list(range(len(_x)))[::10],_x[::10].astype("int"),rotation=45)
plt.show()

2020-11-22 数据科学库(5)数据的合并,聚合以及后处理

总结

2020-11-22 数据科学库(5)数据的合并,聚合以及后处理
2020-11-22 数据科学库(5)数据的合并,聚合以及后处理
2020-11-22 数据科学库(5)数据的合并,聚合以及后处理

未经允许不得转载:作者:1411-李同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《2020-11-22 数据科学库(5)数据的合并,聚合以及后处理》 发布于2020-11-22

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录