Python Pandas - 快速指南


Python Pandas - 简介

Pandas 是一个开源 Python 库,利用其强大的数据结构提供高性能的数据操作和分析工具。Pandas 这个名字来源于“面板数据”这个词——来自多维数据的计量经济学。

2008 年,当需要高性能、灵活的数据分析工具时,开发人员 Wes McKinney 开始开发 pandas。

在 Pandas 之前,Python 主要用于数据处理和准备。它对数据分析的贡献很小。pandas解决了这个问题。使用 Pandas,我们可以完成数据处理和分析的五个典型步骤,无论数据来源如何——加载、准备、操作、建模和分析。

Python with Pandas 广泛应用于学术和商业领域,包括金融、经济、统计、分析等。

pandas的主要特征

  • 快速高效的 DataFrame 对象,具有默认和自定义索引。
  • 用于将数据从不同文件格式加载到内存中数据对象的工具。
  • 数据对齐和缺失数据的综合处理。
  • 日期集的重塑和旋转。
  • 大型数据集基于标签的切片、索引和子集化。
  • 可以删除或插入数据结构中的列。
  • 按数据分组以进行聚合和转换。
  • 高性能数据合并和连接。
  • 时间序列功能。

Python Pandas - 环境设置

标准 Python 发行版不与 Pandas 模块捆绑在一起。一个轻量级的替代方案是使用流行的 Python 包安装程序pip 安装 NumPy。

pip install pandas

如果您安装 Anaconda Python 包,Pandas 将默认安装,并包含以下内容 -

Windows

  • Anaconda(来自https://www.continuum.io)是 SciPy 堆栈的免费 Python 发行版。它还适用于 Linux 和 Mac。

  • Canopy ( https://www.enthought.com/products/canopy/ ) 既可以免费提供,也可以作为商业发行版提供,具有适用于 Windows、Linux 和 Mac 的完整 SciPy 堆栈。

  • Python (x,y) 是一个免费的 Python 发行版,带有适用于 Windows 操作系统的 SciPy 堆栈和 Spyder IDE。(可从http://python-xy.github.io/下载)

Linux

各个 Linux 发行版的包管理器用于在 SciPy 堆栈中安装一个或多个包。

对于 Ubuntu 用户

sudo apt-get install python-numpy python-scipy python-matplotlibipythonipythonnotebook
python-pandas python-sympy python-nose

对于 Fedora 用户

sudo yum install numpyscipy python-matplotlibipython python-pandas sympy
python-nose atlas-devel

数据结构简介

Pandas 处理以下三种数据结构 -

  • 系列
  • 数据框
  • 控制板

这些数据结构构建在 Numpy 数组之上,这意味着它们速度很快。

尺寸及描述

考虑这些数据结构的最佳方式是,高维数据结构是其低维数据​​结构的容器。例如DataFrame是Series的容器,Panel是DataFrame的容器。

数据结构 方面 描述
系列 1 一维标记同质数组,大小不可变。
数据框 2 一般二维标记、尺寸可变的表格结构,具有潜在的异构类型列。
控制板 3 通用 3D 标记、大小可变数组。

构建和处理二维或多维数组是一项繁琐的任务,用户在编写函数时需要考虑数据集的方向。但使用 Pandas 数据结构,可以减少用户的脑力劳动。

例如,对于表格数据 (DataFrame),考虑索引(行)和而不是轴 0 和轴 1 在语义上更有帮助。

可变性

所有 Pandas 数据结构的值都是可变的(可以更改),除了 Series 之外,所有数据结构的大小都是可变的。系列的大小是不可变的。

注意- DataFrame 被广泛使用,并且是最重要的数据结构之一。面板的使用量要少得多。

系列

系列是具有同质数据的一维数组状结构。例如,以下系列是整数 10、23、56、... 的集合

10 23 56 17 号 52 61 73 90 26 72

关键点

  • 数据同质
  • 大小不可变
  • 数据可变的值

数据框

DataFrame是一个具有异构数据的二维数组。例如,

姓名 年龄 性别 评分
史蒂夫 32 男性 3.45
利亚 28 女性 4.6
文号 45 男性 3.9
凯蒂 38 女性 2.78

该表表示组织销售团队的数据及其总体绩效评级。数据以行和列表示。每列代表一个属性,每行代表一个人。

列的数据类型

四列的数据类型如下 -

柱子 类型
姓名 细绳
年龄 整数
性别 细绳
评分 漂浮

关键点

  • 异构数据
  • 尺寸可变
  • 数据可变

控制板

面板是一种数据异构的三维数据结构。很难用图形表示来表示面板。但面板可以被说明为 DataFrame 的容器。

关键点

  • 异构数据
  • 尺寸可变
  • 数据可变

Python pandas - 系列

Series 是一个一维标记数组,能够保存任何类型的数据(整数、字符串、浮点数、Python 对象等)。轴标签统称为索引。

pandas系列

可以使用以下构造函数创建 pandas 系列 -

pandas.Series( data, index, dtype, copy)

构造函数的参数如下 -

先生编号 参数及说明
1

数据

数据有多种形式,如 ndarray、列表、常量

2

指数

索引值必须是唯一的且可散列的,并且与数据的长度相同。如果没有传递索引,则默认np.arange(n) 。

3

数据类型

dtype 是数据类型。如果没有,将推断数据类型

4

复制

复制数据。默认 False

可以使用各种输入创建一个系列,例如 -

  • 大批
  • 词典
  • 标量值或常数

创建一个空系列

可以创建的基本系列是空系列。

例子

#import the pandas library and aliasing as pd
import pandas as pd
s = pd.Series()
print s

输出如下 -

Series([], dtype: float64)

从 ndarray 创建一个系列

如果数据是 ndarray,则传递的索引必须具有相同的长度。如果没有传递索引,则默认索引将为range(n),其中n是数组长度,即 [0,1,2,3…。范围(len(数组))-1]。

实施例1

#import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
data = np.array(['a','b','c','d'])
s = pd.Series(data)
print s

输出如下 -

0   a
1   b
2   c
3   d
dtype: object

我们没有传递任何索引,因此默认情况下,它分配的索引范围为 0 到len(data)-1,即 0 到 3。

实施例2

#import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
data = np.array(['a','b','c','d'])
s = pd.Series(data,index=[100,101,102,103])
print s

输出如下 -

100  a
101  b
102  c
103  d
dtype: object

我们在这里传递了索引值。现在我们可以在输出中看到自定义的索引值。

从 dict 创建一个系列

可以将字典作为输入传递,如果未指定索引,则按排序顺序获取字典键来构​​造索引如果传递index,则会拉出index中标签对应的data中的值。

实施例1

#import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
data = {'a' : 0., 'b' : 1., 'c' : 2.}
s = pd.Series(data)
print s

输出如下 -

a 0.0
b 1.0
c 2.0
dtype: float64

观察- 字典键用于构造索引。

实施例2

#import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
data = {'a' : 0., 'b' : 1., 'c' : 2.}
s = pd.Series(data,index=['b','c','d','a'])
print s

输出如下 -

b 1.0
c 2.0
d NaN
a 0.0
dtype: float64

观察- 索引顺序保持不变,缺失的元素用 NaN(不是数字)填充。

从标量创建系列

如果数据是标量值,则必须提供索引。该值将重复以匹配索引的长度

#import the pandas library and aliasing as pd
import pandas as pd
import numpy as np
s = pd.Series(5, index=[0, 1, 2, 3])
print s

输出如下 -

0  5
1  5
2  5
3  5
dtype: int64

访问带有位置的系列数据

该系列中的数据的访问方式与 ndarray 中的数据类似

实施例1

检索第一个元素。我们已经知道,数组从零开始计数,这意味着第一个元素存储在第零位置,依此类推。

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

#retrieve the first element
print s[0]

输出如下 -

1

实施例2

检索系列中的前三个元素。如果在其前面插入 :,则将从该索引开始的所有项目都将被提取。如果使用两个参数(中间有:),则两个索引之间的项目(不包括停止索引)

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

#retrieve the first three element
print s[:3]

输出如下 -

a  1
b  2
c  3
dtype: int64

实施例3

检索最后三个元素。

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

#retrieve the last three element
print s[-3:]

输出如下 -

c  3
d  4
e  5
dtype: int64

使用标签(索引)检索数据

Series 就像一个固定大小的字典,您可以通过索引标签获取和设置值。

实施例1

使用索引标签值检索单个元素。

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

#retrieve a single element
print s['a']

输出如下 -

1

实施例2

使用索引标签值列表检索多个元素。

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

#retrieve multiple elements
print s[['a','c','d']]

输出如下 -

a  1
c  3
d  4
dtype: int64

实施例3

如果未包含标签,则会引发异常。

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

#retrieve multiple elements
print s['f']

输出如下 -

…
KeyError: 'f'

Python Pandas - 数据帧

数据框是二维数据结构,即数据以表格方式按行和列对齐。

数据框的特点

  • 列可能具有不同类型
  • 大小 – 可变
  • 带标签的轴(行和列)
  • 可以对行和列执行算术运算

结构

假设我们正在使用学生的数据创建一个数据框。

结构表

您可以将其视为 SQL 表或电子表格数据表示形式。

pandas.DataFrame

可以使用以下构造函数创建 pandas DataFrame -

pandas.DataFrame( data, index, columns, dtype, copy)

构造函数的参数如下 -

先生编号 参数及说明
1

数据

数据有多种形式,如 ndarray、series、map、lists、dict、constants 以及另一个 DataFrame。

2

指数

对于行标签,如果没有传递索引,则用于结果帧的索引是可选默认值 np.arange(n) 。

3

对于列标签,可选的默认语法是 - np.arange(n)。仅当未传递索引时才如此。

4

数据类型

每列的数据类型。

5

复制

如果默认值为 False,则此命令(或其他任何命令)用于复制数据。

创建数据框

可以使用各种输入创建 pandas DataFrame,例如 -

  • 列表
  • 词典
  • 系列
  • Numpy ndarrays
  • 另一个数据框

在本章的后续部分中,我们将了解如何使用这些输入创建 DataFrame。

创建一个空数据框

可以创建的基本数据框是空数据框。

例子

#import the pandas library and aliasing as pd
import pandas as pd
df = pd.DataFrame()
print df

输出如下 -

Empty DataFrame
Columns: []
Index: []

从列表创建数据框

可以使用单个列表或列表列表来创建 DataFrame。

实施例1

import pandas as pd
data = [1,2,3,4,5]
df = pd.DataFrame(data)
print df

输出如下 -

     0
0    1
1    2
2    3
3    4
4    5

实施例2

import pandas as pd
data = [['Alex',10],['Bob',12],['Clarke',13]]
df = pd.DataFrame(data,columns=['Name','Age'])
print df

输出如下 -

      Name      Age
0     Alex      10
1     Bob       12
2     Clarke    13

实施例3

import pandas as pd
data = [['Alex',10],['Bob',12],['Clarke',13]]
df = pd.DataFrame(data,columns=['Name','Age'],dtype=float)
print df

输出如下 -

      Name     Age
0     Alex     10.0
1     Bob      12.0
2     Clarke   13.0

注意- 观察dtype参数将 Age 列的类型更改为浮点。

从 ndarrays / 列表的字典创建 DataFrame

所有ndarray 的长度必须相同。如果传递索引,则索引的长度应等于数组的长度。

如果没有传递索引,则默认情况下索引将为 range(n),其中n是数组长度。

实施例1

import pandas as pd
data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}
df = pd.DataFrame(data)
print df

输出如下 -

      Age      Name
0     28        Tom
1     34       Jack
2     29      Steve
3     42      Ricky

注意- 观察值 0、1、2、3。它们是使用函数 range(n) 分配给每个的默认索引。

实施例2

现在让我们使用数组创建一个索引 DataFrame。

import pandas as pd
data = {'Name':['Tom', 'Jack', 'Steve', 'Ricky'],'Age':[28,34,29,42]}
df = pd.DataFrame(data, index=['rank1','rank2','rank3','rank4'])
print df

输出如下 -

         Age    Name
rank1    28      Tom
rank2    34     Jack
rank3    29    Steve
rank4    42    Ricky

注意- 观察,索引参数为每行分配一个索引。

从字典列表创建数据框

字典列表可以作为输入数据传递以创建 DataFrame。默认情况下,字典键被视为列名。

实施例1

以下示例演示如何通过传递字典列表来创建 DataFrame。

import pandas as pd
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data)
print df

输出如下 -

    a    b      c
0   1   2     NaN
1   5   10   20.0

注意- 观察,NaN(不是数字)被附加在缺失的区域中。

实施例2

以下示例演示如何通过传递字典列表和行索引来创建 DataFrame。

import pandas as pd
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
df = pd.DataFrame(data, index=['first', 'second'])
print df

输出如下 -

        a   b       c
first   1   2     NaN
second  5   10   20.0

实施例3

以下示例演示如何创建包含字典、行索引和列索引列表的 DataFrame。

import pandas as pd
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]

#With two column indices, values same as dictionary keys
df1 = pd.DataFrame(data, index=['first', 'second'], columns=['a', 'b'])

#With two column indices with one index with other name
df2 = pd.DataFrame(data, index=['first', 'second'], columns=['a', 'b1'])
print df1
print df2

输出如下 -

#df1 output
         a  b
first    1  2
second   5  10

#df2 output
         a  b1
first    1  NaN
second   5  NaN

注意- 观察,df2 DataFrame 是使用字典键以外的列索引创建的;因此,附加了 NaN。而 df1 是使用与字典键相同的列索引创建的,因此附加了 NaN。

从系列字典创建数据框

可以传递系列字典以形成数据帧。结果索引是所有传递的系列索引的并集。

例子

import pandas as pd

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}

df = pd.DataFrame(d)
print df

输出如下 -

      one    two
a     1.0    1
b     2.0    2
c     3.0    3
d     NaN    4

注意- 观察到,对于系列一,没有传递标签“d”,但在结果中,对于d标签,NaN 附加了 NaN。

现在让我们通过示例来了解列的选择、添加删除

色谱柱选择

我们将通过从 DataFrame 中选择一列来理解这一点。

例子

import pandas as pd

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}

df = pd.DataFrame(d)
print df ['one']

输出如下 -

a     1.0
b     2.0
c     3.0
d     NaN
Name: one, dtype: float64

列添加

我们将通过向现有数据框添加新列来理解这一点。

例子

import pandas as pd

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}

df = pd.DataFrame(d)

# Adding a new column to an existing DataFrame object with column label by passing new series

print ("Adding a new column by passing as Series:")
df['three']=pd.Series([10,20,30],index=['a','b','c'])
print df

print ("Adding a new column using the existing columns in DataFrame:")
df['four']=df['one']+df['three']

print df

输出如下 -

Adding a new column by passing as Series:
     one   two   three
a    1.0    1    10.0
b    2.0    2    20.0
c    3.0    3    30.0
d    NaN    4    NaN

Adding a new column using the existing columns in DataFrame:
      one   two   three    four
a     1.0    1    10.0     11.0
b     2.0    2    20.0     22.0
c     3.0    3    30.0     33.0
d     NaN    4     NaN     NaN

列删除

列可以被删除或弹出;让我们举个例子来理解如何做到这一点。

例子

# Using the previous DataFrame, we will delete a column
# using del function
import pandas as pd

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']), 
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd']), 
   'three' : pd.Series([10,20,30], index=['a','b','c'])}

df = pd.DataFrame(d)
print ("Our dataframe is:")
print df

# using del function
print ("Deleting the first column using DEL function:")
del df['one']
print df

# using pop function
print ("Deleting another column using POP function:")
df.pop('two')
print df

输出如下 -

Our dataframe is:
      one   three  two
a     1.0    10.0   1
b     2.0    20.0   2
c     3.0    30.0   3
d     NaN     NaN   4

Deleting the first column using DEL function:
      three    two
a     10.0     1
b     20.0     2
c     30.0     3
d     NaN      4

Deleting another column using POP function:
   three
a  10.0
b  20.0
c  30.0
d  NaN

行选择、添加和删除

现在我们将通过示例来了解行选择、添加和删除。让我们从选择的概念开始。

按标签选择

可以通过将行标签传递给loc函数来选择行。

import pandas as pd

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']), 
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}

df = pd.DataFrame(d)
print df.loc['b']

输出如下 -

one 2.0
two 2.0
Name: b, dtype: float64

结果是一系列标签作为 DataFrame 的列名称。并且,该系列的名称是检索该系列的标签。

按整数位置选择

可以通过将整数位置传递给iloc函数来选择行。

import pandas as pd

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']),
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}

df = pd.DataFrame(d)
print df.iloc[2]

输出如下 -

one   3.0
two   3.0
Name: c, dtype: float64

切片行

可以使用“:”运算符选择多行。

import pandas as pd

d = {'one' : pd.Series([1, 2, 3], index=['a', 'b', 'c']), 
   'two' : pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])}

df = pd.DataFrame(d)
print df[2:4]

输出如下 -

   one  two
c  3.0    3
d  NaN    4

添加行

使用追加函数将新行添加到 DataFrame 。此函数将在末尾追加行。

import pandas as pd

df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])

df = df.append(df2)
print df

输出如下 -

   a  b
0  1  2
1  3  4
0  5  6
1  7  8

删除行

使用索引标签从 DataFrame 中删除或删除行。如果标签重复,则会删除多行。

如果您观察到,在上面的示例中,标签是重复的。让我们删除一个标签,看看将删除多少行。

import pandas as pd

df = pd.DataFrame([[1, 2], [3, 4]], columns = ['a','b'])
df2 = pd.DataFrame([[5, 6], [7, 8]], columns = ['a','b'])

df = df.append(df2)

# Drop rows with label 0
df = df.drop(0)

print df

输出如下 -

  a b
1 3 4
1 7 8

在上面的示例中,删除了两行,因为这两行包含相同的标签 0。

Python Pandas - 面板

面板是数据的 3D 容器术语“面板数据”源自计量经济学,部分原因是 pandas - pan(el)-da(ta) -s 这个名称。

3 个轴的名称旨在为描述涉及面板数据的操作提供一些语义含义。他们是 -

  • items - 轴 0,每个项目对应于其中包含的一个 DataFrame。

  • Major_axis - 轴 1,它是每个 DataFrame 的索引(行)。

  • minor_axis - 轴 2,它是每个 DataFrame 的列。

pandas.Panel()

可以使用以下构造函数创建面板 -

pandas.Panel(data, items, major_axis, minor_axis, dtype, copy)

构造函数的参数如下 -

范围 描述
数据 数据采用多种形式,例如 ndarray、series、map、lists、dict、constants 以及另一个 DataFrame
项目 轴=0
长轴 轴=1
短轴 轴=2
数据类型 每列的数据类型
复制 复制数据。默认,

创建面板

可以使用多种方式创建面板,例如 -

  • 来自 ndarrays
  • 来自 DataFrames 的字典

来自 3D ndarray

# creating an empty panel
import pandas as pd
import numpy as np

data = np.random.rand(2,4,5)
p = pd.Panel(data)
print p

输出如下 -

<class 'pandas.core.panel.Panel'>
Dimensions: 2 (items) x 4 (major_axis) x 5 (minor_axis)
Items axis: 0 to 1
Major_axis axis: 0 to 3
Minor_axis axis: 0 to 4

注意- 观察空面板和上面面板的尺寸,所有对象都是不同的。

来自 DataFrame 对象的字典

#creating an empty panel
import pandas as pd
import numpy as np

data = {'Item1' : pd.DataFrame(np.random.randn(4, 3)), 
   'Item2' : pd.DataFrame(np.random.randn(4, 2))}
p = pd.Panel(data)
print p

输出如下 -

Dimensions: 2 (items) x 4 (major_axis) x 3 (minor_axis)
Items axis: Item1 to Item2
Major_axis axis: 0 to 3
Minor_axis axis: 0 to 2

创建一个空面板

可以使用面板构造函数创建一个空面板,如下所示 -

#creating an empty panel
import pandas as pd
p = pd.Panel()
print p

输出如下 -

<class 'pandas.core.panel.Panel'>
Dimensions: 0 (items) x 0 (major_axis) x 0 (minor_axis)
Items axis: None
Major_axis axis: None
Minor_axis axis: None

从面板中选择数据

使用从面板中选择数据 -

  • 项目
  • 长轴
  • 短轴

使用物品

# creating an empty panel
import pandas as pd
import numpy as np
data = {'Item1' : pd.DataFrame(np.random.randn(4, 3)), 
   'Item2' : pd.DataFrame(np.random.randn(4, 2))}
p = pd.Panel(data)
print p['Item1']

输出如下 -

            0          1          2
0    0.488224  -0.128637   0.930817
1    0.417497   0.896681   0.576657
2   -2.775266   0.571668   0.290082
3   -0.400538  -0.144234   1.110535

我们有两个项目,并且检索了项目 1。结果是一个具有 4 行和 3 列的 DataFrame,它们是Major_axisMinor_axis维度。

使用major_axis

可以使用方法panel.major_axis(index)访问数据。

# creating an empty panel
import pandas as pd
import numpy as np
data = {'Item1' : pd.DataFrame(np.random.randn(4, 3)), 
   'Item2' : pd.DataFrame(np.random.randn(4, 2))}
p = pd.Panel(data)
print p.major_xs(1)

输出如下 -

      Item1       Item2
0   0.417497    0.748412
1   0.896681   -0.557322
2   0.576657       NaN

使用minor_axis

可以使用方法 panel.minor_axis(index) 访问数据

# creating an empty panel
import pandas as pd
import numpy as np
data = {'Item1' : pd.DataFrame(np.random.randn(4, 3)), 
   'Item2' : pd.DataFrame(np.random.randn(4, 2))}
p = pd.Panel(data)
print p.minor_xs(1)

输出如下 -

       Item1       Item2
0   -0.128637   -1.047032
1    0.896681   -0.557322
2    0.571668    0.431953
3   -0.144234    1.302466

注意- 观察尺寸的变化。

Python Pandas - 基本功能

到目前为止,我们已经了解了 Pandas 的三种数据结构以及如何创建它们。我们将主要关注 DataFrame 对象,因为它在实时数据处理中的重要性,并讨论一些其他 DataStructures。

系列基本功能

先生。 属性或方法及描述
1

返回行轴标签的列表

2

数据类型

返回对象的数据类型。

3

空的

如果系列为空,则返回 True。

4

恩迪姆

根据定义 1,返回基础数据的维数。

5

尺寸

返回基础数据中的元素数量。

6

价值观

以 ndarray 形式返回系列。

7

头()

返回前 n 行。

8

尾巴()

返回最后 n 行。

现在让我们创建一个系列并查看上面列出的所有属性操作。

例子

import pandas as pd
import numpy as np

#Create a series with 100 random numbers
s = pd.Series(np.random.randn(4))
print s

输出如下 -

0   0.967853
1  -0.148368
2  -1.395906
3  -1.758394
dtype: float64

返回该系列的标签列表。

import pandas as pd
import numpy as np

#Create a series with 100 random numbers
s = pd.Series(np.random.randn(4))
print ("The axes are:")
print s.axes

输出如下 -

The axes are:
[RangeIndex(start=0, stop=4, step=1)]

上面的结果是从 0 到 5 的值列表的紧凑格式,即 [0,1,2,3,4]。

空的

返回表示对象是否为空的布尔值。True 表示该对象为空。

import pandas as pd
import numpy as np

#Create a series with 100 random numbers
s = pd.Series(np.random.randn(4))
print ("Is the Object empty?")
print s.empty

输出如下 -

Is the Object empty?
False

恩迪姆

返回对象的维数。根据定义,Series 是一维数据结构,因此它返回

import pandas as pd
import numpy as np

#Create a series with 4 random numbers
s = pd.Series(np.random.randn(4))
print s

print ("The dimensions of the object:")
print s.ndim

输出如下 -

0   0.175898
1   0.166197
2  -0.609712
3  -1.377000
dtype: float64

The dimensions of the object:
1

尺寸

返回系列的大小(长度)。

import pandas as pd
import numpy as np

#Create a series with 4 random numbers
s = pd.Series(np.random.randn(2))
print s
print ("The size of the object:")
print s.size

输出如下 -

0   3.078058
1  -1.207803
dtype: float64

The size of the object:
2

价值观

以数组形式返回系列中的实际数据。

import pandas as pd
import numpy as np

#Create a series with 4 random numbers
s = pd.Series(np.random.randn(4))
print s

print ("The actual data series is:")
print s.values

输出如下 -

0   1.787373
1  -0.605159
2   0.180477
3  -0.140922
dtype: float64

The actual data series is:
[ 1.78737302 -0.60515881 0.18047664 -0.1409218 ]

头尾

要查看 Series 或 DataFrame 对象的小样本,请使用 head() 和 tail() 方法。

head()返回前n行(观察索引值)。要显示的默认元素数量为 5,但您可以传递自定义数量。

import pandas as pd
import numpy as np

#Create a series with 4 random numbers
s = pd.Series(np.random.randn(4))
print ("The original series is:")
print s

print ("The first two rows of the data series:")
print s.head(2)

输出如下 -

The original series is:
0   0.720876
1  -0.765898
2   0.479221
3  -0.139547
dtype: float64

The first two rows of the data series:
0   0.720876
1  -0.765898
dtype: float64

tail()返回最后n行(观察索引值)。要显示的默认元素数量为 5,但您可以传递自定义数量。

import pandas as pd
import numpy as np

#Create a series with 4 random numbers
s = pd.Series(np.random.randn(4))
print ("The original series is:")
print s

print ("The last two rows of the data series:")
print s.tail(2)

输出如下 -

The original series is:
0 -0.655091
1 -0.881407
2 -0.608592
3 -2.341413
dtype: float64

The last two rows of the data series:
2 -0.608592
3 -2.341413
dtype: float64

数据框架基本功能

现在让我们了解什么是 DataFrame 基本功能。下表列出了有助于 DataFrame 基本功能的重要属性或方法。

先生。 属性或方法及描述
1

时间

转置行和列。

2

返回一个列表,其中行轴标签和列轴标签作为唯一的成员。

3

数据类型

返回此对象中的数据类型。

4

空的

如果 NDFrame 完全为空 [无项目],则为 True;如果任何轴的长度为 0。

5

恩迪姆

轴数/数组维度。

6

形状

返回表示 DataFrame 维度的元组。

7

尺寸

NDFrame 中的元素数量。

8

价值观

NDFrame 的 Numpy 表示。

9

头()

返回前 n 行。

10

尾巴()

返回最后 n 行。

现在让我们创建一个 DataFrame 并看看上述属性是如何操作的。

例子

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','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])}

#Create a DataFrame
df = pd.DataFrame(d)
print ("Our data series is:")
print df

输出如下 -

Our data series is:
    Age   Name    Rating
0   25    Tom     4.23
1   26    James   3.24
2   25    Ricky   3.98
3   23    Vin     2.56
4   30    Steve   3.20
5   29    Smith   4.60
6   23    Jack    3.80

T(转置)

返回 DataFrame 的转置。行和列将互换。

import pandas as pd
import numpy as np
 
# Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','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])}

# Create a DataFrame
df = pd.DataFrame(d)
print ("The transpose of the data series is:")
print df.T

输出如下 -

The transpose of the data series is:
         0     1       2      3      4      5       6
Age      25    26      25     23     30     29      23
Name     Tom   James   Ricky  Vin    Steve  Smith   Jack
Rating   4.23  3.24    3.98   2.56   3.2    4.6     3.8

返回行轴标签和列轴标签的列表。

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','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])}

#Create a DataFrame
df = pd.DataFrame(d)
print ("Row axis labels and column axis labels are:")
print df.axes

输出如下 -

Row axis labels and column axis labels are:

[RangeIndex(start=0, stop=7, step=1), Index([u'Age', u'Name', u'Rating'],
dtype='object')]

数据类型

返回每列的数据类型。

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','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])}

#Create a DataFrame
df = pd.DataFrame(d)
print ("The data types of each column are:")
print df.dtypes

输出如下 -

The data types of each column are:
Age     int64
Name    object
Rating  float64
dtype: object

空的

返回布尔值,表示对象是否为空;True 表示该对象为空。

import pandas as pd
import numpy as np
 
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','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])}
 
#Create a DataFrame
df = pd.DataFrame(d)
print ("Is the object empty?")
print df.empty

输出如下 -

Is the object empty?
False

恩迪姆

返回对象的维数。根据定义,DataFrame 是一个 2D 对象。

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','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])}

#Create a DataFrame
df = pd.DataFrame(d)
print ("Our object is:")
print df
print ("The dimension of the object is:")
print df.ndim

输出如下 -

Our object is:
      Age    Name     Rating
0     25     Tom      4.23
1     26     James    3.24
2     25     Ricky    3.98
3     23     Vin      2.56
4     30     Steve    3.20
5     29     Smith    4.60
6     23     Jack     3.80

The dimension of the object is:
2

形状

返回表示 DataFrame 维度的元组。元组(a,b),其中a代表行数,b代表列数。

import pandas as pd
import numpy as np
 
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','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])}
 
#Create a DataFrame
df = pd.DataFrame(d)
print ("Our object is:")
print df
print ("The shape of the object is:")
print df.shape

输出如下 -

Our object is:
   Age   Name    Rating
0  25    Tom     4.23
1  26    James   3.24
2  25    Ricky   3.98
3  23    Vin     2.56
4  30    Steve   3.20
5  29    Smith   4.60
6  23    Jack    3.80

The shape of the object is:
(7, 3)

尺寸

返回 DataFrame 中的元素数量。

import pandas as pd
import numpy as np
 
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','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])}
 
#Create a DataFrame
df = pd.DataFrame(d)
print ("Our object is:")
print df
print ("The total number of elements in our object is:")
print df.size

输出如下 -

Our object is:
    Age   Name    Rating
0   25    Tom     4.23
1   26    James   3.24
2   25    Ricky   3.98
3   23    Vin     2.56
4   30    Steve   3.20
5   29    Smith   4.60
6   23    Jack    3.80

The total number of elements in our object is:
21

价值观

以 NDarray 形式返回 DataFrame 中的实际数据

import pandas as pd
import numpy as np
 
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','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])}
 
#Create a DataFrame
df = pd.DataFrame(d)
print ("Our object is:")
print df
print ("The actual data in our data frame is:")
print df.values

输出如下 -

Our object is:
    Age   Name    Rating
0   25    Tom     4.23
1   26    James   3.24
2   25    Ricky   3.98
3   23    Vin     2.56
4   30    Steve   3.20
5   29    Smith   4.60
6   23    Jack    3.80
The actual data in our data frame is:
[[25 'Tom' 4.23]
[26 'James' 3.24]
[25 'Ricky' 3.98]
[23 'Vin' 2.56]
[30 'Steve' 3.2]
[29 'Smith' 4.6]
[23 'Jack' 3.8]]

头尾

要查看 DataFrame 对象的小样本,请使用head()和 tail() 方法。head()返回前n行(观察索引值)。要显示的默认元素数量为 5,但您可以传递自定义数量。

import pandas as pd
import numpy as np
 
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','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])}

#Create a DataFrame
df = pd.DataFrame(d)
print ("Our data frame is:")
print df
print ("The first two rows of the data frame is:")
print df.head(2)

输出如下 -

Our data frame is:
    Age   Name    Rating
0   25    Tom     4.23
1   26    James   3.24
2   25    Ricky   3.98
3   23    Vin     2.56
4   30    Steve   3.20
5   29    Smith   4.60
6   23    Jack    3.80

The first two rows of the data frame is:
   Age   Name   Rating
0  25    Tom    4.23
1  26    James  3.24

tail()返回最后n行(观察索引值)。要显示的默认元素数量为 5,但您可以传递自定义数量。

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','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])}
 
#Create a DataFrame
df = pd.DataFrame(d)
print ("Our data frame is:")
print df
print ("The last two rows of the data frame is:")
print df.tail(2)

输出如下 -

Our data frame is:
    Age   Name    Rating
0   25    Tom     4.23
1   26    James   3.24
2   25    Ricky   3.98
3   23    Vin     2.56
4   30    Steve   3.20
5   29    Smith   4.60
6   23    Jack    3.80

The last two rows of the data frame is:
    Age   Name    Rating
5   29    Smith    4.6
6   23    Jack     3.8

Python Pandas - 描述性统计

大量方法共同计算 DataFrame 上的描述性统计数据和其他相关操作。其中大多数是聚合,如sum()、mean(),但其中一些(如sumsum())会生成相同大小的对象。一般来说,这些方法采用参数,就像ndarray.{sum, std, ...} 一样,但轴可以通过名称或整数指定

  • DataFrame - “索引”(轴=0,默认),“列”(轴=1)

让我们创建一个 DataFrame 并在本章中使用该对象进行所有操作。

例子

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','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])
}

#Create a DataFrame
df = pd.DataFrame(d)
print df

输出如下 -

    Age  Name   Rating
0   25   Tom     4.23
1   26   James   3.24
2   25   Ricky   3.98
3   23   Vin     2.56
4   30   Steve   3.20
5   29   Smith   4.60
6   23   Jack    3.80
7   34   Lee     3.78
8   40   David   2.98
9   30   Gasper  4.80
10  51   Betina  4.10
11  46   Andres  3.65

和()

返回所请求轴的值的总和。默认情况下,轴为索引(axis=0)。

import pandas as pd
import numpy as np
 
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','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])
}

#Create a DataFrame
df = pd.DataFrame(d)
print df.sum()

输出如下 -

Age                                                    382
Name     TomJamesRickyVinSteveSmithJackLeeDavidGasperBe...
Rating                                               44.92
dtype: object

每个单独的列都是单独添加的(附加字符串)。

轴=1

此语法将给出如下所示的输出。

import pandas as pd
import numpy as np
 
#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','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])
}
 
#Create a DataFrame
df = pd.DataFrame(d)
print df.sum(1)

输出如下 -

0    29.23
1    29.24
2    28.98
3    25.56
4    33.20
5    33.60
6    26.80
7    37.78
8    42.98
9    34.80
10   55.10
11   49.65
dtype: float64

意思是()

返回平均值

import pandas as pd
import numpy as np

#Create a Dictionary of series
d = {'Name':pd.Series(['Tom','James','Ricky','Vin','Steve','Smith','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])
}

#Create a DataFrame
df = pd.DataFrame(d)
print df.mean()

输出如下 -

Age       31.833333
Rating     3.743333
dtype: float64

标准()

返回数值列的布雷塞尔标准差。