Pandas相关基础知识

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.索引和复合符引

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值