你必须掌握的Python数据分析工具之Pandas

简介: 你必须掌握的Python数据分析工具之Pandas

Python是数据分析领域极受喜爱的主流程序语言。这里主要介绍Pandas的常用用法。如果你是从事数据分析、或者人工智能等相关领域,而所用的语言又是Python的话,以下知识点都应该 “张口就来” 。建议收藏,有事没事拿出来看两遍。

Pandas

  在pandas中主要进行的操作有:数据创建数据查看数据选择数据设置缺失值处理汇总与统计类SQL操作时间序列文件I/O等

  在Pandas中主要有SeriesDataframePanel三种数据结构。

  • Series主要处理一维数组,带有标签作为索引;
  • DataFrame中主要处理二维数组,与SQL的表结构类似。可以理解成Series为value的Map数据结构。
  • Panel主要处理三维数组,可以理解成DataFrame为Value的Map数据结构。

  在使用之前我们需要先导入一些包和库:

import numpy as np
import pandas as pd
  • 创建Series对象

  1. 传入list创建Series,并生成默认的整形索引:

s = pd.Series([1,4,3,4,5])
• 1

  其结果如下所示:

0    1
1    4
2    3
3    4
4    5
dtype: int64

  2. 指定索引创建Series

s = pd.Series([1,4,3,4,5],index=['a','b','c','d','e'])
• 1

  其结果如下所示:

a    1
b    4
c    3
d    4
e    5
dtype: int64

  3. 传入Numpy的ndarray数组创建

s = pd.Series(np.arange(0,10,2))
• 1

  其结果如下所示:

0    0
1    2
2    4
3    6
4    8
dtype: int32
  • 创建DataFrame对象

  1. 基本创建方式

dates = pd.date_range('20170101', periods=5)
print(dates)
df = pd.DataFrame(np.random.randn(5, 4), index=dates, columns=list('ABCD'))
print(df)

  其结果如下所示:

DatetimeIndex(['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04',
               '2017-01-05'],
              dtype='datetime64[ns]', freq='D')
                   A         B         C         D
2017-01-01 -0.321335  1.587721  0.299199  0.767145
2017-01-02  1.260628 -0.706693  0.134149  0.640150
2017-01-03 -0.509672  0.478142 -0.979709 -0.425294
2017-01-04 -0.873157  1.294672  0.293942  0.086441
2017-01-05 -0.057205 -0.324212 -0.036619 -2.004187

  2. 传入Python的dict创建DataFrame数组

df = pd.DataFrame({'a':1, 'b':2, 'c':3, 'd':('d1','d2','d3')})
print(df)

  其结果如下所示:

a  b  c   d
0  1  2  3  d1
1  1  2  3  d2
2  1  2  3  d3
  • 数据查看

  1. head()函数

  用Pandas读取数据之后,我们往往想要观察一下数据读取是否准确,这就要用到Pandas里面的head( )函数,这也就是用head( )函数只能读取前五行数据的原因。

s = pd.Series([5,4,3,2,1,0])
print(s.head())

  其结果如下所示:

0    5
1    4
2    3
3    2
4    1
dtype: int64

  如果你需要看6行的数据的话,可以使用以下方式:

s = pd.Series([5,4,3,2,1,0])
print(s.head(6))

  其结果如下所示:

0    5
1    4
2    3
3    2
4    1
5    0
dtype: int64

  2. tail()函数

  如果我们想要查看后五行的数据的话,可以使用tail函数。

s = pd.Series([5,4,3,2,1,0])
print(s.tail())

  其结果如下所示:

1    4
2    3
3    2
4    1
5    0
dtype: int64

  3. 通过indexcolumnsvalues查看df数据:

  a. index:

df = pd.DataFrame(np.random.randn(5,3), index=['a','b','c','d','e'], columns=['item1','item2','item3'])
print(df.index)

  其结果如下所示:

Index(['a', 'b', 'c', 'd', 'e'], dtype='object')
• 1

  b. columns:

df = pd.DataFrame(np.random.randn(5,3), index=['a','b','c','d','e'], columns=['item1','item2','item3'])
print(df.columns)

  其结果如下所示:

Index(['item1', 'item2', 'item3'], dtype='object')
• 1

  c.values:

df = pd.DataFrame(np.random.randn(5,3), index=['a','b','c','d','e'], columns=['item1','item2','item3'])
print(df.values)

  其结果如下所示:

[[ 0.36103977 -0.41744764  0.73185252]
 [-1.32653494 -0.44633907  0.77793686]
 [-0.22452797 -0.26831592  0.84475079]
 [ 2.12886463 -0.7417558   1.25928745]
 [ 0.75119873 -0.39850574 -0.73147078]]

  4. 行列互换

df = pd.DataFrame(np.random.randn(5,3), index=['a','b','c','d','e'], columns=['item1','item2','item3'])
print(df.T)

  其结果如下所示:

a         b         c         d         e
item1 -0.003415  1.485351  0.900848 -0.652781  1.513073
item2 -1.193721  1.458872  1.145293  0.697140  0.865924
item3  0.375283  0.373512 -0.479490  0.899247  0.828550

  5. df排序查看

  由sort_index()函数控制,参数axis表示行还是列,ascending表示是否升序:

df = pd.DataFrame(np.random.randn(5,3), index=['a','b','c','d','e'], columns=['item1','item2','item3'])
print(df.sort_index(axis=0, ascending=False))

  其结果如下所示:

item1     item2     item3
e -0.436986 -0.257037 -0.456523
d  0.450501  1.353554 -0.380524
c -0.762128  0.995587  0.595866
b  0.555154 -0.505319  1.608678
a -1.354116 -1.136033  2.239606
  • 数据选择

  1. 获取列

df = pd.DataFrame(np.random.randn(5,3), index=['a','b','c','d','e'], columns=['item1','item2','item3'])
print(df['item1'])

  其结果如下所示:

a    0.926735
b   -0.962309
c   -0.595314
d   -1.104773
e    0.653732
Name: item1, dtype: float64

  2. 获取行

df = pd.DataFrame(np.random.randn(5,3), index=['a','b','c','d','e'], columns=['item1','item2','item3'])
print(df[0:1])

  其结果如下所示:

item1     item2     item3
a -0.682284  0.175816  0.008739

  3. 通过索引获取数据

  通过loc[name]获取数据:

df = pd.DataFrame(np.random.randn(5,3), index=['a','b','c','d','e'], columns=['item1','item2','item3'])
print(df.loc['a'])

  其结果如下所示:

item1   -0.236757
item2   -1.379234
item3   -2.199539i
Name: a, dtype: float64

  4. 通过位置获取数据

  通过iloc[local num]获取数据:

df = pd.DataFrame(np.random.randn(5,3), index=['a','b','c','d','e'], columns=['item1','item2','item3'])
print(df.iloc[2])

  其结果如下所示:

item1   -0.292156
item2    1.818376
item3   -0.758109
Name: c, dtype: float64

  5. 获取指定的单个数据

df = pd.DataFrame(np.random.randn(5,3), index=['a','b','c','d','e'], columns=['item1','item2','item3'])
print(df.iat[1,1])

  其结果如下所示:

0.1357562784012159
• 1
  • 数据设置
  1. 设置单个值
df = pd.DataFrame(np.random.randn(5,3), index=['a','b','c','d','e'], columns=['item1','item2','item3'])
df.iat[1,1]=10
print(df)

  其结果如下所示:

item1      item2     item3
a -0.819400  -0.398266  0.173521
b -0.860223  10.000000  0.321826
c -0.544537  -0.266417  0.869232
d -0.109308   0.082432  1.685385
e -0.267699   1.172023  0.203023
  1. 设置一个序列
df = pd.DataFrame(np.random.randn(5,3), index=['a','b','c','d','e'], columns=['item1','item2','item3'])
df['item1']=[1, 2, 3, 4, 5]
print(df)

  其结果如下所示:

item1     item2     item3
a      1 -0.473974 -0.988442
b      2  2.122583 -1.353341
c      3 -0.339094  1.108518
d      4  0.066525 -0.714947
e      5  0.160430 -1.140654
  • 缺失值处理

  1. 去除带有Nan空值的行

df.dropna(how='any')
• 1

  2. 填补Nan空值

df.fillna(value=0.1234)
• 1

  3. 获取控制布尔值掩码

pd.isnull(df)
• 1
  • 汇总与统计

  我们首先需要创建一个dataframe:

df = pd.DataFrame(np.random.randn(5,3), index=['a','b','c','d','e'], columns=['item1','item2','item3'])
print(df)

  打印出来的结果是:

>>>       item1     item2     item3
a  0.286680 -0.107453  1.598851
b -1.005839  0.496943  0.137294
c -1.291884  0.097849 -2.080798
d -0.459137 -0.604159  0.703430
e -0.983638  0.649630 -0.584021

  之后我们看看一些信息描述:

df = pd.DataFrame(np.random.randn(5,3), index=['a','b','c','d','e'], columns=['item1','item2','item3'])
print(df.describe())

  结果显示如下所示:

>>>           item1     item2     item3
count  5.000000  5.000000  5.000000
mean   0.264230 -0.325748 -0.259222
std    0.505316  0.840482  1.129705
min   -0.499806 -1.455938 -1.166522
25%    0.005952 -0.995604 -0.959291
50%    0.504441  0.186685 -0.478101
75%    0.594557  0.254665 -0.364955
max    0.716006  0.381454  1.672759
  • 时间序列

  时间序列基于TimestampDatetimeIndex,以及PeriodPeriodIndex进行操作。其主要用途是作为Series或者DataFrame的索引,并进行一系列的时间序列相关操作。下面我们首先通过示例,对Timestamp和Period的数据形式做直观的展示,再接着说明如何生成以及应用该时间序列作为索引:

  1. 创建Timestamp

print(pd.Timestamp('2019-01-01'))
• 1

  结果显示如下所示:

2019-01-01 00:00:00
• 1

  或者:

print(pd.Timestamp(pd.datetime(2019,1,1)))
• 1

  结果显示如下所示:

2019-01-01 00:00:00
• 1

  2. DatatimeIndex索引生成

  DatatimeIndex索引生成的三种方式,pd.datatime(2019,1,1)pd.date_range('2019-1-1', periods=3, freq='D')data_range生成的是日历时间,bdate_range('2017-1-1', periods=10)生成的是工作日时间。

  • 文件I/O

  pandas提供了一系列简单易用的文件I/O函数,可以把Series以及DataFrame的数据以多种形式保存到文件,并从文件读取到内存中。可以保存的形式包括:csvhdfexceljsonhtmlsqlstatasasclipboardpickle。这里简要介绍一下csvexcel的操作方式。

  1. csv文件的存读
df = pd.DataFrame(np.random.randn(4,3), index=['r1', 'r2', 'r3', 'r4'], columns=list('abc'))
df.to_csv('df.csv')
print(pd.read_csv('df.csv'))

  结果显示如下所示:

Unnamed: 0         a         b         c
0         r1  0.094285 -0.875614 -0.261379
1         r2 -2.113989 -0.099856  0.989506
2         r3 -0.465270  0.140364  0.946633
3         r4 -0.344263 -0.542004  0.116143
  1. excel文件的存读
df = pd.DataFrame(np.random.randn(4,3), index=['r1', 'r2', 'r3', 'r4'], columns=list('abc'))
df.to_excel('df.xlsx', sheet_name='Sheet1')
print(pd.read_excel('df.xlsx', 'Sheet1', index_col=None))

  结果显示如下所示:

Unnamed: 0         a         b         c
0         r1  0.165704  0.757834 -0.727770
1         r2 -1.260624  0.028085 -0.211497
2         r3 -0.692826 -1.263691 -1.582624
3         r4 -0.741005 -0.035819  0.163536


相关文章
|
4天前
|
数据挖掘 计算机视觉 Python
Python数据分析13
Pillow 是 PIL(Python Imaging Library)的升级版本,适应 Python 3 的更新而诞生,带来了诸多新特性。它采用模块化结构,主要包括:图像功能模块(Image)、图像滤波功能模块(ImageFilter)、图像增强功能模块(ImageEnhance)和图像绘画功能模块(ImageDraw)。Pillow 支持从多种图像格式读取数据,进行处理,并能输出为常见格式,其官网提供了丰富的应用示例供学习参考。
16 4
|
2天前
|
SQL 数据采集 数据可视化
深入 Python 数据分析:高级技术与实战应用
本文系统地介绍了Python在高级数据分析中的应用,涵盖数据读取、预处理、探索及可视化等关键环节,并详细展示了聚类分析、PCA、时间序列分析等高级技术。通过实际案例,帮助读者掌握解决复杂问题的方法,提升数据分析技能。使用pandas、matplotlib、seaborn及sklearn等库,提供了丰富的代码示例,便于实践操作。
103 64
|
2天前
|
机器学习/深度学习 数据可视化 数据挖掘
使用Python进行数据分析的入门指南
【9月更文挑战第33天】本文旨在为初学者提供一个关于使用Python进行数据分析的全面概述。我们将从基本的安装和设置开始,逐步介绍数据处理、数据可视化以及机器学习的基本概念和应用。文章将通过实际代码示例来展示如何使用Python及其相关库来解决常见的数据分析问题。
|
5天前
|
数据挖掘 Serverless 计算机视觉
Python数据分析 11
SciPy是一款专为数学、科学及工程应用设计的开源软件,它基于NumPy的n维数组构建,提供了丰富的数值例程,包括积分、优化、线性代数等,适用于各种操作系统,安装简易且免费。它还包含了如快速傅里叶变换、信号处理、图像处理、特殊函数计算等功能,满足了科学计算与工程需求。相较于NumPy的一般数组,SciPy提供了真正的矩阵及其相关运算支持。
24 7
|
5天前
|
自然语言处理 搜索推荐 数据挖掘
Python 数据分析10
除了常用的Python数据挖掘建模库外,还有许多其他库也非常实用,例如 jieba、SciPy、OpenCV 和 Pillow 等。其中,jieba 是一个广泛使用的中文分词库,支持多种编程语言,包括 Python、R 和 C++,并且提供了三种分词模式:精确模式、全模式和搜索引擎模式。此外,jieba 还具备词性标注、添加自定义词典及关键词提取等功能,在 GitHub 社区中有较高讨论度,并拥有丰富的实例资源。
18 5
|
4天前
|
算法 数据挖掘 计算机视觉
Python数据分析12
OpenCV是由英特尔公司资助的开源计算机视觉库,集成了丰富的图像处理与计算机视觉算法,拥有超过500个函数,支持多种编程语言与操作系统。该库采用模块化设计,主要包括核心功能、图像处理、2D特征及GUI四个模块,广泛应用于产品检测、医学成像等多个领域。
11 1
|
5天前
|
机器学习/深度学习 并行计算 数据挖掘
Python数据分析8
飞桨(PaddlePaddle)是百度于2016年开源的一款学习框架,它以易用性、高效性、灵活性及可扩展性为特点,提供了涵盖核心深度学习框架、模型库、开发套件等在内的全面功能,并且支持大规模模型训练与多平台部署。此外,它不断优化性能,增强对各类硬件的支持,已在制造业、农业等多个领域广泛应用。
12 2
|
8天前
|
机器学习/深度学习 数据处理 Python
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
从NumPy到Pandas:轻松转换Python数值库与数据处理利器
22 0
|
3月前
|
数据挖掘 Python
【Python】已解决:Python pandas读取Excel表格某些数值字段结果为NaN问题
【Python】已解决:Python pandas读取Excel表格某些数值字段结果为NaN问题
177 0
|
24天前
|
机器学习/深度学习 数据采集 监控
Pandas与Matplotlib:Python中的动态数据可视化
Pandas与Matplotlib:Python中的动态数据可视化
下一篇
无影云桌面