定义
Pandas是基于Numpy的一种工具,目的是解决数据分析任务。通过纳入大量库和一些标准数据模型,提供了高效操作大型数据集所需工具;
安装
pip install pandas
数据类型
Series
- 定义
一维的数组类型,其中每个元素有各自标签;可当作一个由带标签元素组成的numpy数组,标签可以是数字或字符; - 关键点
- 均匀数据;
- 尺寸大小不变;
- 数据的值可变;
Data
- 定义
二维、表格型的数组结构,可存储许多不同类型的数据,且每个轴都有标签,可当作一个series的字典; - 关键点
- 异构数据;
- 大小可变;
- 数据可变;
- 功能特点
- 潜在的类是不同类型;
- 大小可变;
- 标记轴(行和列);
- 可对行和列执行算术运算;
Panel
- 定义
三维,大小可变的数组; - 关键点
- 异构数据;
- 大小可变;
- 数据可变;
三者区别与共性
- 可变性:三者的值都是值可变的,除了series都是大小可变的;
- 较高维数据结构是较低维数据结构的容器,Panel是Data 的容器,Data 是Series的容器;
如何使用Pandas
#!/usr/bin/python3
# -*- coding:utf-8 -*-
# @Time : 2018-12-15 14:29
# @Author : Cunyu
# @Site :
# @File : panda.py
# @Software: PyCharm
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 对象创建
seri = pd.Series([1,3,5,np.nan,9,10])
print(seri)
dates = pd.date_range(\'20181215\', periods=10)
print(dates)
df = pd.Data (np.random.randn(10,4), index=dates, columns=list(\'ABCD\'))
print(df)
# 查看数据
print(\'All:\\n\', df.head())
print(\'前三行:\\n\', df.head(3))
print(\'后三行\\n\', df.tail(3))
print(\'index:\\n\',df.index)
print(\'col:\\n\', df.columns)
print(\'values:\\n\', df.values)
print(\'desc:\\n\', df.describe())
print(\'转置:\\n\', df.T)
print(\'sort by an axis:\\n\', df.sort_index(axis=1, ascending=False))
print(\'sort by values:\\n\', df.sort_values(by=\'B\'))
# 获取,常用数据访问方法:.at, .iat, .loc, .iloc, .ix
print(\"df[\'A\']:\\n\", df[\'A\']) # 选择一列产生一个系列
print(\'df[0:3]:\\n\', df[0:3])
# 按标签选择
print(df.loc[dates[0]])
print(df.loc[:,[\'A\',\'B\']])
print(\'获取某一个特定值:\\n\', df.at[dates[0], \'A\'])
# 通过位置选择
print(\'获取每个特定位置的值:\\n\', df.iloc[3])
print(\'切片操作:\\n\', df.iloc[3:5, 0:2])
print(df.iat[1,1])
# 布尔索引
print(df[df.A>0])
print(\'filter:\\n\', df.copy())
print(\'demo:\\n\', df[df[\'D\'].isin([\'two\', \'four\'])])
\"\"\"
Series
\"\"\"
# pandas.Series(data, index, dtype, copy),构造函数创建
# 创建一个空系列
print(\'Null Series:\\n\', pd.Series())
# 从ndarray创建一个系列
data = np.array([\'a\', \'b\', \'c\', \'d\'])
print(\'ndarray Series:\\n\', pd.Series(data))
# 从字典创建一个系列
data = {\'a\':0, \'b\':3, \'c\':4}
print(\'dict Series:\\n\', pd.Series(dict))
# 从标量创建一个系列
print(\'scalar Series:\\n\', pd.Series(5, index=[1, 2, 4, 8, 0]))
# 从具有位置系列中访问数据
s = pd.Series([1,2,3,4,5],index = [\'a\',\'b\',\'c\',\'d\',\'e\'])
print(\'Search :\\n\', s[:3])
# 使用标签检索数据
s = pd.Series([1,2,3,4,5],index = [\'a\',\'b\',\'c\',\'d\',\'e\'])
print(\'s[\"d\"]: \', s[\'d\'])
# 属性或方法
# 1、axes,返回行轴标签列表
seri = pd.Series(np.random.randn(5))
print(\'axes:\\n\', seri.axes)
# 2、dtype,返回对象数据类型
print(\'dtype:\\n\', seri.dtype)
# 3、empty,若系列为空,返回True
print(\'empty:\\n\', seri.empty)
# 4、ndim,返回底层数据的维数
print(\'ndim:\\n\', seri.ndim)
# 5、size,返回基础数据中的元素数
print(\'size:\\n\', seri.size)
# 6、values,将系列作为ndarray返回
print(\'values:\\n\', seri.values)
# 7、head(n),返回前n行
print(\'head:\\n\', seri.head(3))
# 8、tail(n),返回后n行
print(\'tail:\\n\', seri.tail(3))
\"\"\"
Data
\"\"\"
# pandas.Data (data,index,columns,dtype,copy)
# 创建空Data
print(pd.Data ())
# 从列表创建Data
print(\'List Data :\\n\', pd.Data ([1,3,5,7,9]))
# 从字典创建Data
dict = {\'name\':[\'Manu\', \'Tim\', \'Paker\'], \'age\':[41, 42, 36]}
print(\'Dict Data :\\n\', pd.Data (dict))
# 从系列的字典创建Data
dict_series = {\'First\' : pd.Series([1, 2, 3], index=[\'a\', \'b\', \'c\']),
\'Second\' : pd.Series([1, 2, 3, 4], index=[\'a\', \'b\', \'c\', \'d\'])}
print(\'Series Data :\\n\', pd.Data (dict_series))
# 列选择,列添加,列删除
df = pd.Data (dict_series)
dict_series = {\'First\' : pd.Series([1, 2, 3], index=[\'a\', \'b\', \'c\']),
\'Second\' : pd.Series([1, 2, 3, 4], index=[\'a\', \'b\', \'c\', \'d\'])}
print(\'列选择:\\n\', pd.Data (dict_series)[\'First\'])
df[\'Third\'] = pd.Series([11, 22, 44], index=[\'a\', \'b\', \'c\'])
print(\'列添加:\\n\', df)
del df[\'First\']
df.pop(\'Third\')
print(\'列删除:\\n\', df)
# 属性或方法
dict = {\'Name\':pd.Series([\'Tom\',\'James\',\'Ricky\',\'Vin\',\'Steve\',\'Minsu\',\'Jack\']),
\'Age\':pd.Series([25,26,25,23,30,29,23]),
\'Rating\':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8])}
data = pd.Data (dict)
# 1、axes,返回行轴标签列表
data = pd.Data (np.random.randn(5))
print(\'axes:\\n\', data .axes)
# 2、dtypes,返回对象数据类型
print(\'dtype:\\n\', data .dtypes)
# 3、empty,若系列为空,返回True
print(\'empty:\\n\', data .empty)
# 4、ndim,返回底层数据的维数
print(\'ndim:\\n\', data .ndim)
# 5、size,返回基础数据中的元素数
print(\'size:\\n\', data .size)
# 6、values,将系列作为ndarray返回
print(\'values:\\n\', data .values)
# 7、head(n),返回前n行
print(\'head:\\n\', data .head(3))
# 8、tail(n),返回后n行
print(\'tail:\\n\', data .tail(3))
# 9、T,转置
print(\'T:\\n\', data .T)
# 10、shape,返回表示Data 的维度的元祖
print(\'shape:\\n\', data .shape)
\"\"\"
Panel
\"\"\"
# pandas.Panel(data,items,major_axis,minor_axis,dtype,copy)
# 创建面板
# 创建一个空面板
print(\'Null Panel:\\n\', pd.Panel())
# 从3D ndarray创建
data = np.random.rand(3, 4, 5)
print(\'3D narray:\\n\', pd.Panel(data))
# 从Data 对象的dict创建面板
data = {\'Item1\' : pd.Data (np.random.randn(4, 4)),
\'Item2\' : pd.Data (np.random.randn(4, 5))}
print(\'Data 的Dict:\\n\', pd.Panel(data))
\"\"\"
描述性统计
\"\"\"
dict = {\'Name\':pd.Series([\'Tom\',\'James\',\'Ricky\',\'Vin\',\'Steve\',\'Minsu\',\'Jack\',
\'Lee\',\'David\',\'Gasper\',\'Betina\',\'Andres\']),
\'Age\':pd.Series([25,26,25,23,30,29,23,34,40,30,51,46]),
\'Rating\':pd.Series([4.23,3.24,3.98,2.56,3.20,4.6,3.8,3.78,2.98,4.80,4.10,3.65])}
data = pd.Data (dict)
# 求和
print(\'sum:\\n\', data .sum())
# 均值
print(\'avg:\\n\', data .mean())
# 标准差
print(\'std:\\n\', data .std())
# 非空观测数量
print(\'count:\\n\', data .count())
# 中位数
print(\'median:\\n\', data .median())
# 模值
print(\'mode:\\n\', data .mode())
# 累计总和
print(\'cumsum:\\n\', data .cumsum())
# 累计乘积
print(\'cumprod:\\n\', data [\'Age\'].cumprod())
# 统计信息摘要
print(\'describe:\\n\', data .describe(include=\'all\'))
\"\"\"
函数应用
\"\"\"
# 表格函数应用:pipe()
def adder(elem1, elem2):
return elem1+elem2
data = pd.Data (np.random.randn(10,3),columns=[\'col1\',\'col2\',\'col3\'])
data .pipe(adder,10)
print(\'pipe:\\n\', data .pipe(adder,10))
# 行或列函数应用:apply()
print(\'apply:\\n\', data .apply(np.median))
# 元素函数应用:applymap()
print(\'map:\\n\', data [\'col1\'].map(lambda x:x*100))
print(\'applymap:\\n\', data .apply(lambda x:x*100))
\"\"\"
重建索引
\"\"\"
df1 = pd.Data (np.random.randn(10,3),columns=[\'col1\',\'col2\',\'col3\'])
df2 = pd.Data (np.random.randn(7,3),columns=[\'col1\',\'col2\',\'col3\'])
# 重建索引与其他对象对齐,reindx_like,填充方法:pad/ffill-前向填充、bfill/backfill-向后填充值、nearest-从最近索引值填充
df1 = df1.reindex_like(df2)
print(\'reindex_like:\\n\', df1)
print(\'ffill:\\n\', df2.reindex_like(df1, method=\'ffill\'))
# 重建索引时的填充限制
print(\'limit:\\n\', df2.reindex_like(df1, method=\'nearest\', limit=2))
# 重命名
print(\'rename:\\n\', df1.rename(columns={\'col1\':\'c1\', \'col2\':\'c2\'}))
\"\"\"
迭代
\"\"\"
SIZE=20
data = pd.Data ({
\'A\': pd.date_range(start=\'2016-01-01\',periods=SIZE,freq=\'D\'),
\'x\': np.linspace(0,stop=SIZE-1,num=SIZE),
\'y\': np.random.rand(SIZE),
\'C\': np.random.choice([\'Low\',\'Medium\',\'High\'],SIZE).tolist(),
\'D\': np.random.normal(100, 10, size=(SIZE)).tolist()
})
# iteritems(),每个列作为键,将值与值作为键和列值迭代为Series对象
print(\'iteritems:\')
for key, value in data .iteritems():
继续阅读与本文标签相同的文章
上一篇 :
浅谈如何定义和调用Python的函数
-
9月书讯:别抱怨读书苦,那是你看世界的路
2026-05-19栏目: 教程
-
首页流量波动大?如何避开猜你喜欢的n个雷区
2026-05-19栏目: 教程
-
Linux基础技术实践#网络安全基础技术实践课程
2026-05-19栏目: 教程
-
AI时代,你的职业会是?99%的人都无法直面!
2026-05-19栏目: 教程
-
centos7 编译安装 openresty
2026-05-19栏目: 教程
您的足迹:
