pandas基础常用用法总结,数据分析必会知识点!

准备

其实呢,pandas是再numpy的基础上封装了一些功能,所以您看这篇文章的时候会觉得,好像pandas和Numpy用法有类似的地方。您需要有pandas和numpy, 如果没有,需要您

pip install numpy
pip install pandas

如果下载速度太慢,请看我另一篇博客: pip镜像管理和npm镜像管理

然后每次使用numpy都需要import 一下,以下默认都有

import numpy as np
import pandas as pd

. pandas.Series

创建

创建一个Series,可以如下:

pd.Series(range(15))

也可以指定索引

pd.Series(range(0, 4), index=list('ABCD'))

通过字典创建:

pd.Series({"a": 1, "b": 2, "c": 3}, index={'c', 'd', 'a', 'b'})

也可以通过标量创建

pd.Series(2020)

修改值

更改Series的元素只需要用下标修改即可,看个例子:

import numpy as np
import pandas as pd

s = pd.Series(np.arange(3), index=['a', 'b', 'c'])
s['a'] = 100
print(s)

好了,Series就介绍到这里了。

 

2. pandas.DataFrame

创建

传入一个数组来创建:

n = np.random.randint(low=0, high=10, size=(5, 5))
df1 = pd.DataFrame(data=n)

我们给它定义一下索引

df2 = pd.DataFrame(data=n, columns=list('ABCDE'))

这时候输出发现好看多了。

我们再来看一个用字典生成的案例。

data = {'province': ['广东', '山东', '河南', '四川', '江苏', '河北', '湖南', '安徽', '湖北', '浙江'],
        'population': [10999, 9946, 9532, 8262, 7998, 7470, 6822, 6195, 5885, 5590],
        'city': ['广州', '济南', '郑州', '成都', '南京', '石家庄', '长沙', '合肥', '武汉', '杭州']}
df = pd.DataFrame(data, columns=['province', 'population', 'city'])

还有呢,可以通过Series来创建:

s8 = pd.Series(np.arange(5), index=list('abcde'))
s9 = pd.Series(range(5, 10), index=list('abcde'))
s10 = pd.Series([10, 11, 12, 13, 14], index=list('abcdf'))

df3 = pd.DataFrame([s8, s9, s10])

3. 数据清洗

我们以一个例子边处理边给大家讲解pandas的用法。在讲例子之前会给大家讲要注意的知识点。案例与案例之间是连续的。

知识点1. 读取xlsx文件

df = pd.read_excel('files/order2019.xlsx', index_col='id')

这里选取的order2019.xlsx文件给大家看一眼,看文件名应该知道,是2019年的订单数据,这里index_col指定用来做索引的是 id 那一列。这里哪个xlsx文件我放在和.py文件同个目录下的files目录下了。

例子1. 读取xlsx文件

我们来看有多少行:

import pandas as pd
import datetime
import time

# 读取数据文件
start_time = time.time()
df = pd.read_excel('files/order2019.xlsx', index_col='id')
end_time = time.time()
print(df)  # 104557行
print('读取 {} 行数据花了 {:.2f} 秒'.format(len(df), end_time - start_time))

运行结果:

知识点2. datatime

这里关于datetime有个小案例:

from datetime import datetime

now = datetime.now()
print(now)
print(now.year)
print(now.month)
print(now.day)
print(type(now))

可见,datetime是一个可以帮助我们处理时间的类。

案例2 将 dataFrame中某一列的数据类型改为datetime类型

这里有两列需要处理一下

在这里插入图片描述
可见,datetime是一个可以帮助我们处理时间的类。

案例2 将 dataFrame中某一列的数据类型改为datetime类型

这里有两列需要处理一下

startTime = datetime.datetime(2019, 1, 1)
endTime = datetime.datetime(2019, 12, 31, 23, 59, 59)
# 将数据源中的时间数据转换成datetime形式
df.orderTime = pd.to_datetime(df.orderTime)
df.payTime = pd.to_datetime(df.payTime)

print(df[df.orderTime < startTime])startTime = datetime.datetime(2019, 1, 1)
endTime = datetime.datetime(2019, 12, 31, 23, 59, 59)
# 将数据源中的时间数据转换成datetime形式
df.orderTime = pd.to_datetime(df.orderTime)
df.payTime = pd.to_datetime(df.payTime)

print(df[df.orderTime < startTime])

运行结果:

这里我们运行结果输出订单日期早于2019年1月1日的订单信息。

 

知识点3. dataFrame删除记录

df.drop(index=df[逻辑运算].index, 【inplace=True】)

其中inplace可选可不选,默认为False,就是返回一个删除后的dataFrame,而原来的dataFrame 即现在这个例子的df是不变的。如果加上inplace=True,那么就是对df进行删除记录操作了,代码执行后,df 将被删除相应下标的行,返回None(不返回东西)。

案例3. 我们将早于2019年1月1号的都删除

# 将2019年1月1日前数据删除
df.drop(index=df[df.orderTime < startTime].index, inplace=True)
print(df)  # 104552行
print(' df '.center(50, '*'))
# 显示晚于2019年12月31日23时59分59秒的订单
print(df[df.orderTime > endTime])

好像没有2019年12月31日23时59分59秒的订单,如果有的话,我们也可以像这样去删除:

# 将2019年12月31日后数据删除
df.drop(index=df[df.orderTime > endTime].index, inplace=True)

关于这个drop函数呢,相近的有一个函数dropna。

# 如果该行有none值,则删除该行
d.dropna(axis=0, how='any')

知识点4. dataFrame.fillna()

上个知识点我们学习了如何删除掉含有none的行,但是有时候我们可能并不要删除某一行,我们只需要填充空缺的数据,比如用最小值或者众数。这里给大家举个例子,比如期末考试,小东因身体不舒服,缺考了体育,那么我们总不能因为小东体育缺考,我们就把他的行删掉吧。我们按理应该是把他体育的成绩置为0。当然这里我也只是举个例子,实际情况老师应该会直接写上0而不是写上缺考。

df['列名'].fillna(value=想替换none后的数据的值, inplace=True)

案例4 将chanelID为none的那一列用众数去替换

print(df[df.chanelID.isnull()])
print('分割线'.center(50, '*'))
# 对空值进行修补
df['chanelID'].fillna(value=df.chanelID.mode()[0], inplace=True)
print(df.info())  # 103146

首先,我们知道有8行数据为空,然后当我们替换后,发现chanelID和其他列的非空记录数一样,证明none值被我们替换了。

 

知识点5 新加一列

df['想要新增的列名'] = 和df一样记录长度的向量

案例5. 新增折扣列discount

# 折扣 = 实际付费 / 订单上的价格
df['discount'] = (df.payment / df.orderAmount)
print(df.describe())

运行结果:

最后,我想用一幅图来示例去除换行和空格的操作,也是挺常用的。

结语

其实关于pandas还有很多用法,特别强大,大家可以多去pandas官方文档转转或者去其他博客看看。

到这里你学会了吗?更多案例视频教程加群:1136192749

 

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值