c++ list用法_pandas基础常用用法总结,数据分析必会知识点

准备

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

pip install numpypip install pandas

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

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

import numpy as npimport pandas as pd

. pandas.Series

创建

创建一个Series,可以如下:

pd.Series(range(15))

也可以指定索引

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

通过字典创建:

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

也可以通过标量创建

pd.Series(2020)
7f93f520341a91bb3f49411840637e99.png

修改值

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

import numpy as npimport pandas as pds = pd.Series(np.arange(3), index=['a', 'b', 'c'])s['a'] = 100print(s)
2a27bc5cc0906bc0c370020c23657e80.png

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

2. pandas.DataFrame

创建

传入一个数组来创建:

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

我们给它定义一下索引

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

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

3b9d805966f263790906bbf342c1c7b1.png

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

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

还有呢,可以通过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])
f1a5c26a6c1a27b0c558c6ebddd19bf7.png

3. 数据清洗

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

知识点1. 读取xlsx文件

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

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

feca31cee5e39d30b30e92c3e0bbcf97.png

例子1. 读取xlsx文件

我们来看有多少行:

import pandas as pdimport datetimeimport 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))

运行结果:

4e81bb9fe94ef033063b43394f935a4d.png

知识点2. datatime

这里关于datetime有个小案例:

from datetime import datetimenow = datetime.now()print(now)print(now.year)print(now.month)print(now.day)print(type(now))
6748e1b971efb1f9202fed966ab3db2a.png

可见,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])

运行结果:

1335caea530715ae044cf7f3e152c21d.png

这里我们运行结果输出订单日期早于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])
47dfa674ec58f124dd617f7b37388310.png

好像没有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
585d332c8326f96dce187dbddc53acf2.png

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

知识点5 新加一列

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

案例5. 新增折扣列discount

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

运行结果:

00e130db9b88d21f6fea20062ae20ba3.png

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

c538505c4bb52c909cb3ab519837a950.png

结语

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

到这里你学会了吗?更多案例视频教程后台私信 小编 源码 获取

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值