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由列名称、索引和数据组成。
上面,我们已经读取了一个外部数据,这是洛杉矶的人口普查数据。有些时候,我们读取的文件很大。如果全部输出预览这些文件,既不美观,又很耗时。还好,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
参数请参考官方文档。