本文部分资料文件请前往https://www.jinyuttsrz.top/index.php/archives/89/下载
本文部分资源来自【黑马程序员】,【菜鸟教程】 学习更多内容:前往菜鸟教程
为什么要学习pandas?
numpy能够帮助我们处理数值,但是pandas除了处理数值之外(基于numpy),还能够帮助我们处理其他类型的数据
Pandas 安装
pip install pandasimport pandas
print(pandas.__version)
若输出版本号则安装成功,如:' 2.3.3'
Pandas的常用数据类型
1.series一维,带标签数组(索引)
2.dataframe二维,series容器
pandas中的Series创建
import pandas as pd
pd.Series([1,2,3,4])
输出内容:#第一列为索引,第二列为数据,索引可进行指定等操作

t = pd.Series([1,2,3,4])
print(type(t))
使用index指定series的索引
t2 = pd.Series([12,31,1,2],index=list("abcd"))
print(t2)
通过字典创建
temp_dic={"name":"xiaoming","age":30,"tel":123}
t3 = pd.Series(temp_dic)
print(t3)
使用astype可以改变类型
t2.astype(float)
输出内容:
pandas中的Series切片与索引
在尝试取不存在的数据时,会返回nan
取多个不连续的数据
t3.indexfor i in t3.index:
print(i)Values的类型与查询
t3.values
print(type(t3.values))import pandas as pd
import numpy as np
pd.DataFrame(np.arange(12).reshape(3,4))
pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("wxyz"))d1={"name":["a","b"],"age":[11,12],"tel":[123,345]}
t1 = pd.DataFrame(d1)
print(t1)
print(type(t1))d1=[{"name":"a","age":12,"tel":123},{"name":"b","age":13}]
pd.DataFrame(d1)(一)打印表内所有内容
import pandas as pd
df = pd.read_csv('dogNames2.csv')
print(df)
输出结果:
import pandas as pd
df = pd.read_csv('dogNames2.csv')
print(df.head()) #默认显示5个
print(df.info()) #打印综合信息
(三)对数据行Count_AnimalName从大到小排列,并展示前十项
import pandas as pd
df = pd.read_csv('dogNames2.csv')
df=df.sort_values(by="Count_AnimalName",ascending=False)
by对Count_AnimalName进行排序,ascending参数为(T)升序或(F)降序
print(df.head(10))
注意pandas的取行或列的注意点:
方括号写数组,表示取行,对行进行操作 写字符串,表示对取列索引,对列进行操作
取某一列的方法:df[“Count_AnimalName”] 同时选择行和列的方法df:100
pandas的布尔索引
(一) 找到使用次数在800-1000次的狗的名字
注意点:不同的条件之间需要用括号括起来
import pandas as pd
df = pd.read_csv('dogNames2.csv')
df=df.sort_values(by="Count_AnimalName",ascending=False)
print(df[(800<df["Count_AnimalName"])&(df["Count_AnimalName"]<1000)])
输出内容:

(二)找到所有的使用次数超过700并且名字的字符串的长度大于4的狗的名字
对数据的判断:pd.isnull()和pd.notnull()
import numpy as np
t = pd.DataFrame(np.arange(12).reshape(3,4),index=list("abc"),columns=list("wxyz"))
t.iloc[1:,:2]=np.nan
print(t)仅显示不含nan的数据行(使用布尔索引)
t[pd.notnull(t["w"])]pd.notnull(t["w"])删除nan所在行:(dropna)
dropna (axis=0,how='any',inplace=False)
axis:对哪个轴进行修改
how:any或者all 。当参数为all时,只对哪一行全是all才会执行删除
inplace=True:在原数据上进行修改,返回None;inplace=False:返回为修改过的数据,原数据不变

pandas的常用统计方法
假设现在我们有一组从2006年到2016年1000部最流行的电影数据,我们想知道这些电影数据中评分的平均分,导演的人数等信息,我们应该怎么获取?
(一)查看数据信息
import pandas as pd
file_path = "IMDB-Movie-Data.csv"
df = pd.read_csv(file_path)
print(df.info)print(df.head(1))import pandas as pd
file_path = "IMDB-Movie-Data.csv"
df = pd.read_csv(file_path)
获取平均分
print(df["Rating"].mean())
获取导演的人数
print(len(df["Director"].unique()))
获取演员的人数
temp = df["Actors"].str.split(",").tolist()
actors = [i for j in temp for i in j]
actors_num = len(set(actors))
print(actors_num)pandas的字符串离散化案例
对于这一组电影数据,如果我们希望统计电影分类(gene)的情况,应该如何处理数据?
思路:重新构造一个全为0的数组,列名为分类,如果某一条数据中分类出现过,就让0变为1
import pandas as pd
import numpy as np
file_path = "./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的数组
zeros_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
统计每个分类的电影的数量和
genre_count = zeros_df.sum(axis=0)
排序
genre_count = genre_count.sort_values()
print(genre_count)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.join(df2),end='\n\n')
print(df2.join(df1),end='\n\n')
df3 = pd.DataFrame(np.arange(9).reshape(3, 3), columns=list("fax"))
df1.loc["A","a"] = 100
print(df1,end='\n\n')
print(df3,end='\n\n')
print(df1.merge(df3, on="a",how="inner"),end="\n\n") #内连接,将交集合并
print(df1.merge(df3, on="a",how="outer"),end="\n\n") #外连接
print(df1.merge(df3, on="a",how="left"),end="\n\n")
print(df1.merge(df3, on="a",how="right"),end="\n\n")
输出内容:
a b c d x y z
A 1.0 1.0 1.0 1.0 0.0 0.0 0.0
B 1.0 1.0 1.0 1.0 0.0 0.0 0.0
x y z a b c d
A 0.0 0.0 0.0 1.0 1.0 1.0 1.0
B 0.0 0.0 0.0 1.0 1.0 1.0 1.0
C 0.0 0.0 0.0 NaN NaN NaN NaN
a b c d
A 100.0 1.0 1.0 1.0
B 1.0 1.0 1.0 1.0
f a x
0 0 1 2
1 3 4 5
2 6 7 8
a b c d f x
0 1.0 1.0 1.0 1.0 0 2
a b c d f x
0 1.0 1.0 1.0 1.0 0.0 2.0
1 4.0 NaN NaN NaN 3.0 5.0
2 7.0 NaN NaN NaN 6.0 8.0
3 100.0 1.0 1.0 1.0 NaN NaN
a b c d f x
0 100.0 1.0 1.0 1.0 NaN NaN
1 1.0 1.0 1.0 1.0 0.0 2.0
a b c d f x
0 1.0 1.0 1.0 1.0 0 2
1 4.0 NaN NaN NaN 3 5
2 7.0 NaN NaN NaN 6 8












































comment 评论区
star_outline 咱快来抢个沙发吧!