python Pandas
沉迷学习的郑博士 人气:0一、字符串离散化示例
对于一组电影数据,我们希望统计电影分类情况,应该如何处理数据?(每一个电影都有很多个分类)
思路:首先构造一个全为0的数组,列名为分类,如果某一条数据中分类出现过,就让0变为1
代码:
# coding=utf-8 import pandas as pd from matplotlib import pyplot as plt import numpy as np file_path = "./IMDB-Movie-Data.csv" df = pd.read_csv(file_path) print(df["Genre"].head(3)) #统计分类的列表 temp_list = df["Genre"].str.split(",").tolist() #[[],[],[]] genre_list = list(set([i for j in temp_list for i in j])) #构造全为0的数组 zeros_df = pd.DataFrame(np.zeros((df.shape[0],len(genre_list))),columns=genre_list) # print(zeros_df) #给每个电影出现分类的位置赋值1 for i in range(df.shape[0]): #zeros_df.loc[0,["Sci-fi","Mucical"]] = 1 zeros_df.loc[i,temp_list[i]] = 1 # print(zeros_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,width=0.4,color="blue") plt.xticks(range(len(_x)),_x) plt.show()
结果:
二、数据合并
2.1 join
join:默认情况下他是把行索引相同的数据合并到一起
2.2 merge
merge:按照指定的列把数据按照一定的方式合并到一起
三、数据的分组和聚合
示例:现在我们有一组关于全球星巴克的店铺的统计数据,如果我想知道美国的星巴克数量和中国的哪个多,或者我想知道中国每个省份的星巴克的数量情况,应该怎么办?
代码:
import pandas as pd file_path = "./starbucks_store_worldwide.csv" df = pd.read_csv(file_path) grouped = df.groupby(by="Country")#按照分组查询 # print(grouped) #DataFrameGroupBy #可以进行遍历 # for i,j in grouped: # print(i) # print("-"*100) # print(j,type(j)) # print("*"*100) # 调用聚合方法 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/Province").count()["Brand"] # print(grouped) # 数据按照多个条件进行分组,返回Series grouped = df["Brand"].groupby(by=[df["Country"],df["State/Province"]]).count() # print(grouped) # print(type(grouped)) # 数据按照多个条件进行分组,返回DataFrame grouped1 = df[["Brand"]].groupby(by=[df["Country"],df["State/Province"]]).count() grouped2= df.groupby(by=[df["Country"],df["State/Province"]])[["Brand"]].count() grouped3 = df.groupby(by=[df["Country"],df["State/Province"]]).count()[["Brand"]] print(grouped1,type(grouped1)) print("*"*100) print(grouped2,type(grouped2)) print("*"*100) print(grouped3,type(grouped3))
四、索引
简单的索引操作:
获取index:df.index
指定index:df.index=['x','y']
重新设置index:df.reindex(list("abcdef"))
指定某一行作为index:df.set_index("Country",drop=False)
返回index的唯一值:df.set_index("Country").index.unique()
总结
加载全部内容