Pandas应用

什么是Pandas?

Pandas 是基于 NumPy 的一个开源 Python 库,它被广泛用于快速分析数据,以及数据清洗和准备等工作。它的名字来源是由“ Panel data”(面板数据,一个计量经济学名词)两个单词拼成的。简单地说,你可以把 Pandas 看作是 Python 版的 Excel。
在这里插入图片描述

常见的数据类型

1)Series:一维数组,与Numpy中的一维array类似。二者与Python基本的数据结构List也很相近。Series如今能保存不同种数据类型,字符串、boolean值、数字等都能保存在Series中。
2)Time- Series:以时间为索引的Series。
3)DataFrame:二维的表格型数据结构。很多功能与R中的data.frame类似。可以将DataFrame理解为Series的容器。
4)Panel :三维的数组,可以理解为DataFrame的容器。
Panel 4D:四维…
Panel 5D: 五维

Panel nD: n维

安装Pandas

如果你已经安装了 Anaconda,你可以很方便地在终端或者命令提示符里输入命令安装 Pandas:

conda install pandas

如果你还没安装 Anaconda,你也可以用 Python 自带的包管理工具 pip 来安装:

pip install pandas

查看所安装Pandas的版本信息:

import pandas as pd
print(pd.__version__)

在这里插入图片描述

创建一个Series对象

import pandas as pd
import numpy as np
import string
from matplotlib import pyplot as plt

1)通过列表创建Series对象:(如果不指定索引, 默认从0开始)

array = ["粉条", "粉丝", "粉带"]
s1 = pd.Series(data=array)
print(s1)

在这里插入图片描述
2). 通过numpy的对象Ndarray创建Series:

n = np.random.randn(5)   # 随机创建一个ndarray对象;
s2 = pd.Series(data=n)
print(s2)

在这里插入图片描述

n = np.random.randn(5)   # 随机创建一个ndarray对象;
s2 = pd.Series(data=n)
# 修改元素的数据类型;
ss2 = s2.astype(np.int)
print(ss2)

在这里插入图片描述
3). 通过字典创建Series对象:

dict = {string.ascii_lowercase[i]:i for i in range(10)}
s3 = pd.Series(dict)
print(s3)

在这里插入图片描述

Series的基本操作

import pandas as pd
import numpy as np
import  string
array = ["粉条", "粉丝", "粉带"]
s1 = pd.Series(data=array)
print(s1)

在这里插入图片描述
1). 修改Series索引

print(s1.index)
s1.index = ['A', 'B', 'C']
print(s1)

在这里插入图片描述
2). Series纵向拼接;

array = ["粉条", "粉丝", "粉带"]
 如果不指定索引, 默认从0开始;
s2 = pd.Series(data=array)
s3 = s1.append(s2)
print(s3)

**3). 删除指定索引对应的元素;**
3). 删除指定索引对应的元素;

s1.index = ['A', 'B', 'C']
# array = ["粉条", "粉丝", "粉带"]
s2 = pd.Series(data=array)
s3 = s1.append(s2)
s3 = s3.drop('C')  #bbbbbbbbbb 删除索引为‘C’对应的值;
print(s3)

在这里插入图片描述
4). 根据指定的索引查找元素

print(s3['B'])
s3['B'] = np.nan
print(s3)

在这里插入图片描述
5). 切片操作 — 同列表

print(s3[:2])
print(s3[::-1])
print(s3[-2:])  # 显示最后两个元素

在这里插入图片描述

Series运算

import pandas as pd
import numpy as np
import  string

s1  = pd.Series(np.arange(5), index=list(string.ascii_lowercase[:5]))
s2  = pd.Series(np.arange(2, 8), index=list(string.ascii_lowercase[2:8]))

print(s1)
print(s2)

在这里插入图片描述
注意:
按照对应的索引进行计算, 如果索引不同,则填充为Nan。

1)加法

print(s1 + s2)
print(s1.add(s2))

在这里插入图片描述
2)减法

print(s1 - s2)
print(s1.sub(s2))

在这里插入图片描述
3)乘法

print(s1 * s2)
print(s1.mul(s2))

在这里插入图片描述
4)除法

print(s1 / s2)
print(s1.div(s2))

在这里插入图片描述
5)中位数

print(s1)
print(s1.median())

在这里插入图片描述

6)求和

print(s1.sum())

在这里插入图片描述

7)最大值

print(s1.max())

在这里插入图片描述

8)最小值

print(s1.min())

在这里插入图片描述

Series特殊的where方法


import pandas as pd
import numpy as np
import string

# &**********series中的where方法运行结果和numpy中完全不同;
s1 = pd.Series(np.arange(5), index=list(string.ascii_lowercase[:5]))
print(s1.where(s1 > 3))

# 对象中不大于3的元素赋值为10;
print(s1.where(s1 > 3, 10))

**# 对象中大于3的元素赋值为10;**
print(s1.mask(s1 > 3, 10))

在这里插入图片描述

创建DataFrame数据类型

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt

方法1: 通过列表创建

li = [
    [1, 2, 3, 4],
    [2, 3, 4, 5]
]

# DataFRame对象里面包含两个索引, 行索引(0轴, axis=0), 列索引(1轴, axis=1)
d1 = pd.DataFrame(data=li, index=['A', 'B'], columns=['views', 'loves', 'comments', 'tranfers'])
# print(d1)

在这里插入图片描述
方法2: 通过numpy对象创建

narr = np.arange(8).reshape(2, 4)
# DataFRame对象里面包含两个索引, 行索引(0轴, axis=0), 列索引(1轴, axis=1)
d2 = pd.DataFrame(data=narr, index=['A', 'B'], columns=['views', 'loves', 'comments', 'tranfers'])
print(d2)

在这里插入图片描述
方法三: 通过字典的方式创建

dict = {
    'views': [1, 2, ],
    'loves': [2, 3, ],
    'comments': [3, 4, ]

}
d3 = pd.DataFrame(data=dict, index=['粉条', "粉丝"])
print(d3)

在这里插入图片描述
日期操作的特例:

pd.date_range()
dates = pd.date_range(start='1/1/2018', end='1/08/2018')
print(dates)

行索引

dates = pd.date_range(start='today', periods=6)

数据

data_arr = np.random.randn(6, 4)

列索引

columns = ['A', 'B', 'C', 'D']
d4 = pd.DataFrame(data_arr, index=dates, columns=columns)
print(d4)

在这里插入图片描述
一维对象: 建立一个以2019年每一天作为索引, 值为随机数;

dates = pd.date_range(start='1/1/2019', end='12/31/2019', freq='D')
datas = np.random.randn(len(dates))
s1 = pd.Series(datas, index=dates)
print(s1[:3])

在这里插入图片描述

从文件中读取数据

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt

1). csv文件的写入

df = pd.DataFrame(
    {'province': ['陕西', '陕西', '四川', '四川', '陕西'],
     'city': ['咸阳', '宝鸡', '成都', '成都', '宝鸡'],
     'count1': [1, 2, 3, 4, 5],
     'count2': [1, 2, 33, 4, 5]
     }
)

df.to_csv('doc/csvFile.csv')
print("csv文件保存成功")

在这里插入图片描述
在这里插入图片描述

2). csv文件的读取

df2 = pd.read_csv('doc/csvFile.csv')
print(df2)

在这里插入图片描述

3). excel文件的写入

df2.to_excel("/tmp/excelFile.xlsx", sheet_name="省份统计")
print("excel文件保存成功")

在这里插入图片描述
在这里插入图片描述

分组与聚合之group_by

pandas提供了一个灵活高效的groupby功能,
1). 它使你能以一种自然的方式对数据集进行切片、切块、摘要等操作。
2). 根据一个或多个键(可以是函数、数组或DataFrame列>名)拆分pandas对象。
3). 计算分组摘要统计,如计数、平均值、标准差,或用户自定义函数。

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt

df = pd.DataFrame(
    {'province': ['陕西', '陕西', '四川', '四川', '陕西'],
     'city': ['咸阳', '宝鸡', '成都', '成都', '宝鸡'],
     'count1': [1, 2, 3, 4, 5],
     'count2': [1, 2, 33, 4, 5]
     }
)

在这里插入图片描述
1)根据某一列的key值进行统计分析;

grouped = df['count1'].groupby(df['province'])
print(grouped.describe())
print(grouped.median())

在这里插入图片描述
2)根据城市统计分析cpunt1的信息;

grouped = df['count1'].groupby(df['city'])
print(grouped.max())

在这里插入图片描述
3)指定多个key值进行分类聚合

grouped = df['count1'].groupby([df['province'], df['city']])
print(grouped)
print(grouped.max())
print(grouped.sum())
print(grouped.count())

在这里插入图片描述
4)通过unstack方法, 实现层次化的索引;

 print(grouped.max().unstack())

在这里插入图片描述

字符串操作

import pandas as pd
import numpy as np
from matplotlib import pyplot as plt



series1= pd.Series(['$A:1', '$B:2', '$C:3', np.nan, '$cat:3'])
print(series1)

在这里插入图片描述
1)将所有的字母转换为小写字母, 除了缺失值

print(series1.str.lower())

在这里插入图片描述
2) 将所有的字母转换为大写字母, 除了缺失值

print(series1.str.upper())

在这里插入图片描述
3)分离

print(series1.str.split(":"))

在这里插入图片描述

4)去掉左右两端的某个字符

print(series1.str.strip('$'))

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值