1.为什么要学习 pandas,有什么作用?
numpy 能够帮助我们进行数值处理,但是pandas不仅 能够处理数值数据还可以处理其他类型的数据(字符串、时间序列等)
2.pandas常用数据类型
Series,一维,带标签数组
DataFrame,二维,Series容器
3.Series的创建、取值等
两种方式:一种直接创建,一种传入字典创建
#创建Series
import pandas as pd
#直接创建
s1 = pd.Series([2,4,6,68,9,87])
print(s1)
print(type(s1))
#创建字典传入
dict = {"name":"jiangqi","age":18,"sex":"male","grade":"stu"}
s2 = pd.Series(dict)
print(s2)
print(type(s2))
#创建时指定索引名称
s3 = pd.Series([2,4,6,68,9,87],index=list("abcdef"))
print(s3)
#索引:一个的时候传入序号或者index,多个的时候传入其 列表
#切片取值:直接传入start,end或者步长
print(s2["name"])
print(s2[["name","age"]])
print(s3[1:3])
print(s3[:])
print(s3["a"])
print(s3[s3>20])
print(s2.index)
print(s2.values)
4.pandas读取数据
pd.read_csv
pd.read_excel
pd.read_sql(sql_sentence,connection)
读取 MongoDB数据:
from pymongo import MongoClient
import pandas as pd
client = MongoClient()
collection = client["douban"]["tv1"]
data = list(collection.find())
t1 = data[0]
t1 = pd.Series(t1)
print(data)
5.DataFrame创建
创建其对象:
import pandas as pd
import numpy as np
df = pd.DataFrame(np.arange(12).reshape(3, 4))
print(df)
DataFrame对象既有行索引,又有列索引:
行索引,横向索引,叫index,0轴,axis=0
列索引,纵向索引,叫columns,1轴,axis=1
df2 = pd.DataFrame(np.arange(12).reshape(3, 4),index=list("abc"),columns=list("WXYZ"))
print(df2)
将字典传入结合嵌入列表(也可以一个个字典传入):
dd = {"name":["jq","dwj"],"age":[18,20],"sex":["male","famale"]}
df3 = pd.DataFrame(dd)
print(df3)
结果:
6.DataFrame常用属性及方法
#DataFrame常用属性
print("查看行列数:",df3.shape)
print("列数据类型:",df3.dtypes)
print("数据维度:",df3.ndim)
print("行索引:",df3.index)
print("列索引:",df3.columns)
print("对象值:",df3.values)
#常用方法
print("查看前2行:",df3.head(2)) #默认前五行,可以加参数
print("查看后2行:",df3.tail(2)) #默认后五行,可以加参数
print("查看相关信息 :",df3.info()) #相关信息
print("均值方差等信息:",df3.describe()) #统计数字的相关情况
排序:(按照某一列进行排序)
df3 = df3.sort_values(by="age",ascending=False)
print(df3)
7.pandas取行或列
#pandas取行或列
#方括号中写数组,表示取行,对行进行操作
#方括号中写字符串,表示取列,对列尽心操作
dd = {"name":["jq","dwj","jf","jyf"],"age":[18,20,16,10],"sex":["male","famale","male","child"]}
df = pd.DataFrame(dd)
print(df[:2])
print(df["name"])
print(type(df["name"]))
print(df[:2]["name"]) #同时取行列
8.pandas的loc与iloc:
df.loc通过标签获取行数据
df.iloc通过位置获取行数据
8.pandas之布尔索引
注意:①不同条件之间用括号括起来;
②且用&,或用|;
③tolist()方法可以将series类型转换为列表
9.缺失值的处理
pandas中的缺失存在两种情况:空NaN、0
判断是否存在空值:
处理方式:①直接删除所在行列;
df.dropna(axis=0,how='any',inplace=False)
how表示是否删除全部空值所在行;
inplace是否原地替换;
②填充数据;
df.fillna(t.mean()),t.mean()为某一列的平均值,pandas 中的均值计算不会把NaN这一个值算进去(numpy需要自己操作去掉这个NaN值);
对某一列操作 :t["age"].fillna(t["age"].mean());
对于0的处理:(不是所有的0都需要处理),t[t==0]=np.nan,计算平均值等情况NaN不参与,0是参与的;
10.pandas之常用统计方法
import pandas as pd
import numpy as np
file_path = "IMDB-Movie-Data.csv"
df = pd.read_csv(file_path)
#查看数据总体信息
# print(df.info())
#查看前五行,有哪些数据
# print(df.head(5))
#获取电影的平均评分
print(df["Rating"].mean())
#导演的人数
# print(len(set(df["Director"].tolist())))
print(len(df["Director"].unique())) #唯一,去重
#获取演员的人数
temp_actor_list = df["Actors"].str.split(",").tolist() #大列表中包含小列表
actor_list = [i for j in temp_actor_list for i in j]
actor_num = len(set(actor_list))
print(actor_num)
#电影时长的最大最小值中值
print(df["Runtime (Minutes)"].max())
print(df["Runtime (Minutes)"].min())
print(df["Runtime (Minutes)"].median())
#电影时长的最大最小值位置
print(df["Runtime (Minutes)"].idxmax())
print(df["Runtime (Minutes)"].idxmin())
11.画图小案例
#绘制直方图查看电影时长的分布情况
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
#显示中文
plt.rcParams['font.sans-serif'] = ['KaiTi']
plt.rcParams['axes.unicode_minus'] = False
file_path = "IMDB-Movie-Data.csv"
df = pd.read_csv(file_path)
run_timedata = df["Runtime (Minutes)"].values
print(type(df["Runtime (Minutes)"])) #<class 'pandas.core.series.Series'>
print(type(run_timedata)) #<class 'numpy.ndarray'>
max_runtime = df["Runtime (Minutes)"].max()
min_runtime = df["Runtime (Minutes)"].min()
num_bins = (max_runtime-min_runtime)//5
plt.figure(figsize=(20,8),dpi=80)
plt.xticks(range(min_runtime,max_runtime+5,5))
plt.xlabel("时长",fontdict={'family':'KaiTi','color':'k','size':20})
plt.ylabel("数量",fontdict={'family':'KaiTi','color':'k','size':20})
plt.title("电影时长统计情况",fontdict={'family':'KaiTi','color':'k','size':30})
plt.hist(run_timedata,num_bins)
plt.show()
运行效果:
12.索引和复合符引