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



1. pandas.Series

创建

创建一个Series,可以如下:

pd.Series(range(15))

也可以指定索引

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

series

通过字典创建:

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

在这里插入图片描述

也可以通过标量创建

pd.Series(2020)

在这里插入图片描述

扫描二维码关注公众号,回复: 11874919 查看本文章

修改值

更改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类型

这里有两列需要处理一下

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官方文档转转或者去其他博客看看。

猜你喜欢

转载自blog.csdn.net/weixin_43850253/article/details/107816664