数据科学库之——pandas

本节主要讲解的是pandas的使用。


numpy已经能够帮助我们处理数据,能够结合matplotlib解决我们数据分析的问题,那么pandas学习的目的在什么地方呢?

numpy能够帮我们处理处理数值型数据,但是这还不够
很多时候,我们的数据除了数值之外,还有字符串,还有时间序列等
比如:我们通过爬虫获取到了存储在数据库中的数据
比如:之前youtube的例子中除了数值之外还有国家的信息,视频的分类(tag)信息,标题信息等
所以,numpy能够帮助我们处理数值,但是pandas除了处理数值之外(基于numpy),还能够帮助我们处理其他类型的数据

pandas的常用数据类型

Series 一维,带标签数组
DataFrame 二维,Series容器

1. Series

Series创建

import numpy as np
import pandas as pd
import string
t = pd.Series(np.arange(10),index = list(string.ascii_uppercase[:10]))
print(t,type(t))

执行结果为:
A 0
B 1
C 2
D 3
E 4
F 5
G 6
H 7
I 8
J 9
dtype: int32 <class ‘pandas.core.series.Series’>
在这里插入图片描述

#字典推导式创建一个字典i
a = {string.ascii_uppercase[i]:i for i in range(10)}
print(a)
#再通过字典创建Serious,可以发现字典就是索引的键
print(pd.Series(a))

运行结果为:
{‘A’: 0, ‘B’: 1, ‘C’: 2, ‘D’: 3, ‘E’: 4, ‘F’: 5, ‘G’: 6, ‘H’: 7, ‘I’: 8, ‘J’: 9}
A 0
B 1
C 2
D 3
E 4
F 5
G 6
H 7
I 8
J 9
dtype: int64

t = pd.Series(a,index = list(string.ascii_uppercase[5:15]))
print(t,type(t))

重新给其指定其他的索引后,如果能够对应上就取其值,否则就是NAN
在这里插入图片描述
Series切片和索引
在这里插入图片描述
在这里插入图片描述

2. DataFrame

pandas之读取外部数据
我们的这组数据存在csv中,我们直接使用pd. read_csv即可

和我们想象的有些差别,我们以为他会是一个Series类型,但是他是一个DataFrame,那么接下来我们就来了解这种数据类型
但是,还有一个问题:
对于数据库比如mysql或者mongodb中数据我们如何使用呢?
pd.read_sql(sql_sentence,connection)

print(pd.DataFrame(np.arange(12).reshape(3,4)))

运行结果为:
0 1 2 3
0 0 1 2 3
1 4 5 6 7
2 8 9 10 11
DataFrame对象既有行索引,又有列索引
行索引,表明不同行,横向索引,叫index,0轴,axis=0
列索引,表名不同列,纵向索引,叫columns,1轴,axis=1

print(pd.DataFrame(np.arange(12).reshape(3,4),index = list(string.ascii_uppercase[:3]),columns = list(string.ascii_uppercase[-4:])))

运行结果为:
W X Y Z
A 0 1 2 3
B 4 5 6 7
C 8 9 10 11
在这里插入图片描述

t = pd.DataFrame(np.arange(12).reshape(3,4),index = list(string.ascii_uppercase[:3]),columns = list(string.ascii_uppercase[-4:]))
print(t.shape)

运行结果为:
(3, 4)
现在假设我们有一个组关于狗的名字的统计数据,那么为了观察这组数据的情况,我们应该怎么做呢?
我们想利用一个狗狗名字的数据进行测试:
首先我们需要读入一个.csv文件。(需要测试文件的下方评论区留邮箱)然后再对名字进行排序。

A = pd.read_csv("./dogNames2.csv")
print(A.sort_values(by="Count_AnimalName",ascending=False))

“./”还记得吧,指当前文件夹,如果忘了就是没好好看之前的python回顾课哦。
loc与iloc
df.loc 通过标签索引行数据
df.iloc 通过位置获取行数据

print(t.loc[["A","C"],["W","Z"]],"\n")
print(t.loc["A":,["W","Z"]],"\n")
print(t.loc["A":"C",["W","Z"]],"\n")
print(t.loc["A",["W","Z"]],"\n")
print(t.iloc[1:3,[2,3]],"\n")
print(t.iloc[1:3,1:3],"\n")
#更改数值
t.loc["A","Y"] = 100
print(t,"\n")
t.iloc[1:2,0:2] = 200
print(t,"\n")

运行结果为:
W Z
A 0 3
C 8 11

W Z
A 0 3
B 4 7
C 8 11

W Z
A 0 3
B 4 7
C 8 11

W 0
Z 3
Name: A, dtype: int32

Y   Z

B 6 7
C 10 11

X Y
B 5 6
C 9 10

W X Y Z
A 0 1 100 3
B 4 5 6 7
C 8 9 10 11

W X Y Z
A 0 1 100 3
B 200 200 6 7
C 8 9 10 11

布尔索引
回到之前狗的名字的问题上,假如我们想找到所有的使用次数超过800的狗的名字,应该怎么选择?

print(A[A["Count_AnimalName"]>800])

运行结果为:
Row_Labels Count_AnimalName
1156 BELLA 1195
2660 CHARLIE 856
3251 COCO 852
9140 MAX 1153
12368 ROCKY 823

假如我们想找到所有的使用次数超过700并且名字的字符串的长度大于4的狗的名字,应该怎么选择?

print(A[(A["Row_Labels"].str.len()>4)&(A["Count_AnimalName"]>700)])

运行结果为:
Row_Labels Count_AnimalName
1156 BELLA 1195
2660 CHARLIE 856
8552 LUCKY 723
12368 ROCKY 823

下面列举了一些常用的字符串方法:
在这里插入图片描述
缺失数据的处理
在这里插入图片描述
我们的数据缺失通常有两种情况:
一种就是空,None等,在pandas是NaN(和np.nan一样)
另一种是我们让其为0,蓝色框中
对于NaN的数据,在numpy中我们是如何处理的?
在pandas中我们处理起来非常容易

判断数据是否为NaN:pd.isnull(df),pd.notnull(df)

处理方式1:删除NaN所在的行列dropna (axis=0, how=‘any’, inplace=False)
处理方式2:填充数据,t.fillna(t.mean()),t.fiallna(t.median()),t.fillna(0)
处理为0的数据:t[t==0]=np.nan
当然并不是每次为0的数据都需要处理
计算平均值等情况,nan是不参与计算的,但是0会

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值