- Python在数据处理和准备⽅⾯⼀直做得很好,但在数据分析和建模⽅⾯就差⼀些。pandas帮助填补了这⼀空⽩,使您能够在Python中执⾏整个数据分析⼯作流程,⽽不必切换到更特定于领域的语⾔,如R。
- 与出⾊的 jupyter⼯具包和其他库相结合,Python中⽤于进⾏数据分析的环境在性能、⽣产率和协作能⼒⽅⾯都是卓越的。
- pandas是 Python 的核⼼数据分析⽀持库,提供了快速、灵活、明确的数据结构,旨在简单、直观地处理关系型、标记型数据。pandas是Python进⾏数据分析的必备⾼级⼯具。
- pandas的主要数据结构是 Series(⼀维数据)与 DataFrame (⼆维数据),这两种数据结构⾜以处理⾦融、统计、社会科学、⼯程等领域⾥的⼤多数案例
- 处理数据⼀般分为⼏个阶段:数据整理与清洗、数据分析与建模、数据可视化与制表,Pandas 是处理数据的理想⼯具。
- pip install pandas -i https://pypi.tuna.tsinghua.edu.cn/simple
- pandas是基于numpy的升级,使用它必须得先安装导入numpy
数据结构
Series
Series是一维的,⽤列表⽣成 Series时,Pandas 默认⾃动⽣成整数索引,也可以指定索引
l = [0, 1, 7, 9, np.NAN, None, 1024, 512]
# ⽆论是numpy中的NAN还是Python中的None在pandas中都以缺失数据NaN对待
s1 = pd.Series(data=l) # pandas⾃动添加索引
s2 = pd.Series(data=l, index=list('abcdefhi'), dtype='float32') # 指定⾏索引
# 传⼊字典创建,key⾏索引
s3 = pd.Series(data={'a': 99, 'b': 137, 'c': 149}, name='Python_score')
display(s1, s2, s3)
DataFrame
DataFrame是由多种类型的列构成的⼆维标签数据结构,可以理解成多个Series公用索引,类似于 Excel 、SQL 表,或 Series 对象构成的
字典。
import numpy as np
import pandas as pd
# index 作为⾏索引,字典中的key作为列索引,创建了3*3的DataFrame表格⼆维数组
df1 = pd.DataFrame(data={'Python': [99, 107, 122], 'Math': [111, 137, 88], 'En':
[68, 108, 43]}, # key作为列索引
index=['张三', '李四', 'Michael']) # ⾏索引
df2 = pd.DataFrame(data=np.random.randint(0, 151, size=(5, 3)),
index=['Danial', 'Brandon', 'softpo', 'Ella', 'Cindy'], # ⾏索引
columns=['Python', 'Math', 'En']) # 列索引
Pandas数据查看
import numpy as np
import pandas as pd
# 创建 shape(150,3)的⼆维标签数组结构DataFrame
df = pd.DataFrame(data=np.random.randint(0, 151, size=(150, 3)),
index=None, # ⾏索引默认
columns=['Python', 'Math', 'En']) # 列索引
# 查看其属性、概览和统计信息
df.head(10) # 显示头部10⾏,默认5个
df.tail(10) # 显示末尾10⾏,默认5个
df.shape # 查看形状,⾏数和列数
df.dtypes # 查看数据类型
df.index # ⾏索引
df.columns # 列索引
df.values # 对象值,⼆维ndarray数组
df.describe() # 查看数值型列的汇总统计,计数、平均值、标准差、最⼩值、四分位数、最⼤值
df.info() # 查看列索引、数据类型、⾮空计数和内存信息
数据输入和输出
1.CSV处理
import numpy as np
import pandas as pd
df = DataFrame(data=np.random.randint(0, 50, size=[50, 5]), # 薪资情况
columns=['IT', '化⼯', '⽣物', '教师', '⼠兵'])
# 保存到当前路径下,⽂件命名是:salary.csv。csv逗号分割值⽂件格式
df.to_csv('./salary.csv',
sep=';', # ⽂本分隔符,默认是逗号
header=True, # 是否保存列索引
index=True) # 是否保存⾏索引,保存⾏索引,⽂件被加载时,默认⾏索引会作为⼀列
# 加载
pd.read_csv('./salary.csv',
sep=';', # 默认是逗号
header=[0], # 指定列索引
index_col=0) # 指定⾏索引
pd.read_table('./salary.csv', # 和read_csv类似,读取限定分隔符的⽂本⽂件
sep=';',
header=[0], # 指定列索引
index_col=1) # 指定⾏索引,IT作为⾏索引
2.Excel处理
pip install xlrd -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install xlwt -i https://pypi.tuna.tsinghua.edu.cn/simple
import numpy as np
import pandas as pd
df1 = pd.DataFrame(data=np.random.randint(0, 50, size=[50, 5]), # 薪资情况
columns=['IT', '化⼯', '⽣物', '教师', '⼠兵'])
df2 = pd.DataFrame(data=np.random.randint(0, 50, size=[150, 3]), # 计算机科⽬的考
试成绩
columns = ['Python', 'Tensorflow', 'Keras'])
# 保存到当前路径下,⽂件命名是:salary.xls
df1.to_excel('./salary.xls',
sheet_name='salary', # Excel中⼯作表的名字
header=True, # 是否保存列索引
index=False) # 是否保存⾏索引,保存⾏索引
pd.read_excel('./salary.xls',
sheet_name=0, # 读取哪⼀个Excel中⼯作表,默认第⼀个
header=0, # 使⽤第⼀⾏数据作为列索引
names=list('ABCDE'), # 替换⾏索引
index_col=1) # 指定⾏索引,B作为⾏索引
# ⼀个Excel⽂件中保存多个⼯作表
with pd.ExcelWriter('./data.xlsx') as writer:
df1.to_excel(writer, sheet_name='salary', index=False)
df2.to_excel(writer, sheet_name='score', index=False)
pd.read_excel('./data.xlsx',
sheet_name='salary') # 读取Excel中指定名字的⼯作表
3. HDF5处理
pip install tables -i https://pypi.tuna.tsinghua.edu.cn/simple
HDF5是⼀个独特的技术套件,可以管理⾮常⼤和复杂的数据收集。
HDF5,可以存储不同类型数据的⽂件格式,后缀通常是.h5,它的结构是层次性的。Excel只能存100W就到头了,它可以存的更多
⼀个HDF5⽂件可以被看作是⼀个组包含了各类不同的数据集。
对于HDF5⽂件中的数据存储,有两个核⼼概念:group 和 dataset
dataset 代表数据集,⼀个⽂件当中可以存放不同种类的数据集,这些数据集如何管理,就⽤到了group最直观的理解,可以参考我们的⽂件管理系统,不同的⽂件位于不同的⽬录下。
⽬录就是HDF5中的group, 描述了数据集dataset的分类信息,通过group 有效的将多种dataset 进⾏管理和区分;⽂件就是HDF5中的dataset, 表示的是具体的数据。
import numpy as np
import pandas as pd
df1 = pd.DataFrame(data=np.random.randint(0, 50, size=[50, 5]), # 薪资情况
columns=['IT', '化⼯', '⽣物', '教师', '⼠兵'])
df2 = pd.DataFrame(data=np.random.randint(0, 50, size=[150, 3]), # 计算机科⽬的考
试成绩
columns = ['Python', 'Tensorflow', 'Keras'])
# 保存到当前路径下,⽂件命名是:data.h5
df1.to_hdf('./data.h5', key='salary') # 保存数据的key,标记
df2.to_hdf('./data.h5', key='score')
pd.read_hdf('./data.h5',
key='salary') # 获取指定的标记、key的数据
4. SQL处理
pip install sqlalchemy -i https://pypi.tuna.tsinghua.edu.cn/simple
pip install pymysql -i https://pypi.tuna.tsinghua.edu.cn/simple
import pandas as pd
# SQLAlchemy是Python编程语⾔下的⼀款开源软件。提供了SQL⼯具包及对象关系映射(ORM)⼯具
from sqlalchemy import create_engine
df = pd.DataFrame(data=np.random.randint(0, 50, size=[150, 3]), # 计算机科⽬的考试
成绩
columns = ['Python', 'Tensorflow', 'Keras'])
# 数据库连接
conn = create_engine('mysql+pymysql://root:12345678@localhost/pandas?
charset = UTF8MB4
')
# 保存到数据库
df.to_sql('score', # 数据库中表名
conn, # 数据库连接
if_exists='append')
# 如果表名存在,追加数据
# 从数据库中加载
pd.read_sql('select * from score limit 10', # sql查询语句
conn, # 数据库连接
index_col='Python') # 指定⾏索引名
数据选取
获取数据
import pandas as pd
import numpy as np
df = pd.DataFrame(data = np.random.randint(0,150,size = [150,3]),# 计算机科⽬的考
试成绩
columns=['Python','Tensorflow','Keras'])
df['Python'] # 获取单列,Series
df.Python # 获取单列,Series
df[['Python','Keras']] # 获取多列,DataFrame
df[3:15] # ⾏切⽚
标签选择
import pandas as pd
import numpy as np
df = pd.DataFrame(data = np.random.randint(0,150,size = [10,3]),# 计算机科⽬的考试
成绩
index = list('ABCDEFGHIJ'),# ⾏标签
columns=['Python','Tensorflow','Keras'])
df.loc[['A','C','D','F']] # 选取指定⾏标签数据。
df.loc['A':'E',['Python','Keras']] # 根据⾏标签切⽚,选取指定列标签的数据
df.loc[:,['Keras','Tensorflow']] # :默认保留所有⾏
df.loc['E'::2,'Python':'Tensorflow'] # ⾏切⽚从标签E开始每2个中取⼀个,列标签进⾏切⽚
df.loc['A','Python'] # 选取标量值
位置选择
import pandas as pd
import numpy as np
df = pd.DataFrame(data = np.random.randint(0,150,size = [10,3]),# 计算机科⽬的考试
成绩
index = list('ABCDEFGHIJ'),# ⾏标签
columns=['Python','Tensorflow','Keras'])
df.iloc[4] # ⽤整数位置选择。
df.iloc[2:8,0:2] # ⽤整数切⽚,类似NumPy
df.iloc[[1,3,5],[0,2,1]] # 整数列表按位置切⽚
df.iloc[1:3,:] # ⾏切⽚
df.iloc[:,:2] # 列切⽚
df.iloc[0,2] # 选取标量值
boolean索引
import pandas as pd
import numpy as np
df = pd.DataFrame(data = np.random.randint(0,150,size = [10,3]),# 计算机科⽬的考试
成绩
index = list('ABCDEFGHIJ'),# ⾏标签,⽤户
columns=['Python','Tensorflow','Keras']) # 考试科⽬
cond1 = df.Python > 100 # 判断Python分数是否⼤于100,返回值是boolean类型的Series
df[cond1] # 返回Python分数⼤于100分的⽤户所有考试科⽬数据
cond2 = (df.Python > 50) & (df['Keras'] > 50) # &与运算
df[cond2] # 返回Python和Keras同时⼤于50分的⽤户的所有考试科⽬数据
df[df > 50]# 选择DataFrame中满⾜条件的值,如果满⾜返回值,不然返回空数据NaN
df[df.index.isin(['A','C','F'])] # isin判断是否在数组中,返回也是boolean类型值
赋值操作
import pandas as pd
import numpy as np
df = pd.DataFrame(data = np.random.randint(0,150,size = [10,3]),# 计算机科⽬的考试
成绩
index = list('ABCDEFGHIJ'),# ⾏标签,⽤户
columns=['Python','Tensorflow','Keras']) # 考试科⽬
s = pd.Series(data = np.random.randint(0,150,size =
9),index=list('BCDEFGHIJ'),name = 'PyTorch')
df['PyTorch'] = s # 增加⼀列,DataFrame⾏索引⾃动对⻬
df.loc['A','Python'] = 256 # 按标签赋值
df.iloc[3,2] = 512 # 按位置赋值
df.loc[:,'Python'] = np.array([128]*10) # 按NumPy数组进⾏赋值
df[df >= 128] = -df # 按照where条件进⾏赋值,⼤于等于128变成原来的负数,否则不变
df
Pandas总结
- ⼀个快速、⾼效的DataFrame对象,⽤于数据操作和综合索引;
- ⽤于在内存数据结构和不同格式之间读写数据的⼯具:CSV和⽂本⽂件、Microsoft Excel、SQL数据库和快速HDF 5格式;
- 智能数据对⻬和丢失数据的综合处理:在计算中获得基于标签的⾃动对⻬,并轻松地将凌乱的数据操作为有序的形式;
- 数据集的灵活调整和旋转;
- 基于智能标签的切⽚、花式索引和⼤型数据集的⼦集;
- 可以从数据结构中插⼊和删除列,以实现⼤⼩可变;
- 通过在强⼤的引擎中聚合或转换数据,允许对数据集进⾏拆分应⽤组合操作;
- 数据集的⾼性能合并和连接;
- 层次轴索引提供了在低维数据结构中处理⾼维数据的直观⽅法;
- 时间序列-功能:⽇期范围⽣成和频率转换、移动窗⼝统计、移动窗⼝线性回归、⽇期转换和滞后。甚⾄在不丢失数据的情况下创建特定领域的时间偏移和加⼊时间序列;
- 对性能进⾏了⾼度优化,⽤Cython或C编写了关键代码路径。
- Python与pandas在⼴泛的学术和商业领域中使⽤,包括⾦融,神经科学,经济学,统计学,⼴告,⽹络分析,等等
网友评论