Pandas学习笔记

Pandas主要有下面几种数据类型:

  • Series(一维数组)
  • DataFrame(二维数组)
  • Panel(三维数组)
  • Panel4D(四维数组)
  • PanelND(N维数组)

Series

pandas.Series(data=None, index=None)

其中,data 可以是字典,或者NumPy 里的 ndarray 对象等。index 是数据索引,索引是 Pandas 数据结构中的一大特性,它主要的功能是帮助我们更快速地定位数据。

%matplotlib inline
import pandas as pd

s = pd.Series({'a': 10, 'b': 20, 'c': 30})
'''
a    10
b    20
c    30
dtype: int64
'''

type(s)可以查看数据的类型。

pandas.core.series.Series
# pandas.core.series.Series

由于 Pandas 基于 NumPy 开发。那么 NumPy 的数据类型 ndarray 多维数组自然就可以转换为 Pandas 中的数据。而 Series 则可以基于 NumPy 中的一维数据转换。

import numpy as np
s = pd.Series(np.random.randn(5))
'''
0   -1.912776
1   -1.462528
2   -0.416607
3   -1.522392
4   -1.196030
dtype: float64
'''

DataFrame

DataFrame是Pandas中最常见的一种,由于常常数据是以二维形式存储在csv种,所以用Pandas读取csv中的二维数组是一项必不可少的技能,你可以把 DataFrame 看成是 Series 的扩展类型,它仿佛是由多个 Series 拼合而成。它和 Series 的直观区别在于,数据不但具有行索引,且具有列索引。

DataFrame的构造方法有:

  • 一维数组、列表、字典或者 Series 字典。
  • 二维或者结构化的 numpy.ndarray
  • 一个 Series 或者另一个 DataFrame。
df = pd.DataFrame({'one': pd.Series([1, 2, 3]),
                   'two': pd.Series([4, 5, 6])})
'''
	one	two
0	1	4
1	2	5
2	3	6
'''

使用列表组成的字典和字典组成的列表都可以用来构建DataFrame,字典的 keys 为列名,列表的顺序为索引。

使用 Numpy 来构建一个 DataFrame:

pd.DataFrame(np.random.randint(5, size=(2, 4)))
'''
	0	1	2	3
0	2	0	4	0
1	2	2	2	1
'''

数据读取

从csv文件读取数据:

df = pd.read_csv('./titanic/train.csv')
'''
     PassengerId  Survived  Pclass  ...     Fare Cabin  Embarked
0              1         0       3  ...   7.2500   NaN         S
1              2         1       1  ...  71.2833   C85         C
2              3         1       3  ...   7.9250   NaN         S
3              4         1       1  ...  53.1000  C123         S
4              5         0       3  ...   8.0500   NaN         S
..           ...       ...     ...  ...      ...   ...       ...
886          887         0       2  ...  13.0000   NaN         S
887          888         1       1  ...  30.0000   B42         S
888          889         0       3  ...  23.4500   NaN         S
889          890         1       1  ...  30.0000  C148         C
890          891         0       3  ...   7.7500   NaN         Q

[891 rows x 12 columns]
'''

基本操作

一个DataFrame由列名称、索引和数据组成。

img

上面,我们已经读取了一个外部数据,这是洛杉矶的人口普查数据。有些时候,我们读取的文件很大。如果全部输出预览这些文件,既不美观,又很耗时。还好,Pandas 提供了 head()tail() 方法,它可以帮助我们只预览一小块数据。

df.head()  # 默认显示前 5 条
df.tail(7)  # 指定显示后 7 条

Pandas 还提供了统计和描述性方法,方便你从宏观的角度去了解数据集。describe() 相当于对数据集进行概览,会输出该数据集每一列数据的计数、最大值、最小值等。

df.describe()

Pandas 将 DataFrame 转化为 Numpy 数组。

df.values()

其他常用还有:

  • df.index
  • df.columns
  • df.shape

数据选择

数据选择常用在对数据的处理过程中,它提供了像 Numpy 中一样对数据灵活的处理方式。

基于索引数字选择

Pandas 中 DataFrame 是支持行索引和列索引的。.iloc方法可以接受如下类型:

  • 整数,例如5
  • 整数组成的列表,如[1, 2, 3]
  • 布尔数组
  • 可返回索引值的函数或参数

例如,获得前3行:

df.iloc[:3]

获取1、3、5行:

df.iloc[[1, 3, 5]]

获取2-4列:

df.iloc[:, 1:4]

基于标签名称选择

选择 'Total Population' 列到 'Total Males' 列。

df.loc[:, 'Total Population':'Total Males']

数据删减

Pandas 中以.drop开头的函数与删除有关。

指定删除的列或行:

df.drop(labels=['Median Age', 'Total Males'], axis=1)

去重,可以用axis指定行去重还是列去重:

df.drop_duplicates()

删除缺失值:

df.dropna()

数据填充

检测缺失值
df = pd.DataFrame(np.random.rand(9, 5), columns=list('ABCDE'))
# 插入 T 列,并打上时间戳
df.insert(value=pd.Timestamp('2017-10-1'), loc=0, column='Time')
# 将 1, 3, 5 列的 1,3,5 行置为缺失值
df.iloc[[1, 3, 5, 7], [0, 2, 4]] = np.nan
# 将 2, 4, 6 列的 2,4,6 行置为缺失值
df.iloc[[2, 4, 6, 8], [1, 3, 5]] = np.nan

df.isna()
'''
	A	B
0	False	False
1	False	True
2	True	True
3	False	False
4	False	False
5	False	False
'''
填充

用0填充df.fillna(0)

用缺失值前面的值填充df.fillna(method='pad'),用后面的值填充df.fillna(method='bfill')

其他的df.fillna参数请参考官方文档。

参考

Pandas 数据处理基础入门

Tutorials

一个人没有梦想,和咸鱼有什么区别!
原文地址:https://www.cnblogs.com/TABball/p/12829449.html