Python Pandas笔记

在这里插入图片描述
Pandas 是非常著名的开源数据处理库,我们可以通过它完成对数据集进行快速读取、转换、过滤、分析等一系列操作。除此之外,Pandas 拥有强大的缺失数据处理与数据透视功能,可谓是数据预处理中的必备利器。

一 数据类型

数据类型主要有以下几种,它们分别是:Series(一维数组),DataFrame(二维数组),Panel(三维数组),Panel4D(四维数组),PanelND(更多维数组)。

1.Series

Series 是 Pandas 中最基本的一维数组形式。其可以储存整数、浮点数、字符串等类型的数据。Series 基本结构如下:

pandas.Series(data=None, index=None)
data 可以是字典,或者NumPy 里的 ndarray 对象等,index 是数据索引

import pandas as pd
s = pd.Series({'a': 10, 'b': 20, 'c': 30})
s

output:
a 10
b 20
c 30
dtype: int64

# 查看类型
type(s)

output:
pandas.core.series.Series

import numpy as np

s = pd.Series(np.random.randn(5))
s

output:
0 -0.078556
1 -0.305926
2 0.075182
3 -0.524775
4 1.413602
dtype: float64

2. DataFrame

DataFrame 和平常的电子表格或 SQL 表结构相似。可以把 DataFrame 看成是 Series 的扩展类型,它仿佛是由多个 Series 拼合而成。它和 Series 的直观区别在于,数据不但具有行索引,且具有列索引。

pandas.DataFrame(data=None, index=None, columns=None)

区别于 Series,其增加了 columns 列索引。DataFrame 可以由以下多个类型的数据构建:

1.一维数组、列表、字典或者 Series 字典。
2.二维或者结构化的 numpy.ndarray。
3. 一个 Series 或者另一个 DataFrame。

一个由 Series 组成的字典来构建 DataFrame

df = pd.DataFrame({'one': pd.Series([1, 2, 3]),
                   'two': pd.Series([4, 5, 6])})
df

output:
在这里插入图片描述
不指定索引时,DataFrame 的索引同样是从 0 开始。示例列表生成

df = pd.DataFrame({'one': [1, 2, 3],
                   'two': [4, 5, 6]})
df

ouput:
在这里插入图片描述
由带字典的列表生成 DataFrame

df = pd.DataFrame([{'one': 1, 'two': 4},
                   {'one': 2, 'two': 5},
                   {'one': 3, 'two': 6}])
df

output:
在这里插入图片描述
用Numpy多维数组来构建一个 DataFrame

pd.DataFrame(np.random.randint(5, size=(2, 4)))

output:
在这里插入图片描述

Series 实际上可以被初略看出是只有 1 列数据的 DataFrame。二者的核心区别仍然是 Series 没有列索引。

二 数据读取

读取数据 CSV 文件的方法是 pandas.read_csv(),你可以直接传入一个相对路径,或者是网络 URL。
CSV 存储时是一个二维的表格,Pandas 会自动将其读取为 DataFrame 类型

df =pd.read_csv("https://labfile.oss.aliyuncs.com/courses/906/los_census.csv")
df

在这里插入图片描述

三 数据操作

1. 预览数据

df.head()  # 默认显示前 5 条

在这里插入图片描述

df.tail(7)  # 指定显示后 7 条

在这里插入图片描述describe() 相当于对数据集进行概览,会输出该数据集每一列数据的计数、最大值、最小值等

df.describe()

在这里插入图片描述

2. 数据转换

.values 将 DataFrame 转换为 NumPy 数组。

df.values

output:
array([[9.1371e+04, 1.0000e+00, 7.3500e+01, …, 1.0000e+00, 1.0000e+00,
1.0000e+00],
[9.0001e+04, 5.7110e+04, 2.6600e+01, …, 2.8642e+04, 1.2971e+04,
4.4000e+00],
[9.0002e+04, 5.1223e+04, 2.5500e+01, …, 2.6347e+04, 1.1731e+04,
4.3600e+00],
…,
[9.3560e+04, 1.8910e+04, 3.2400e+01, …, 9.4190e+03, 6.4690e+03,
2.9200e+00],
[9.3563e+04, 3.8800e+02, 4.4500e+01, …, 1.2500e+02, 1.0300e+02,
2.5300e+00],
[9.3591e+04, 7.2850e+03, 3.0900e+01, …, 3.6320e+03, 1.9820e+03,
3.6700e+00]])

3.常见属性

更多参考官方地址

df.index  # 查看索引

output:
RangeIndex(start=0, stop=319, step=1)

df.columns  # 查看列名

output:
Index([‘Zip Code’, ‘Total Population’, ‘Median Age’, ‘Total Males’,
‘Total Females’, ‘Total Households’, ‘Average Household Size’],
dtype=‘object’)

df.shape  # 查看形状

output:
(319, 7)

四 数据选择

1.基于索引数字选择

如果未自己指定行索引或者列对应的标签,那么 Pandas 会默认从 0 开始以数字的形式作为行索引,并以数据集的第一行作为列对应的标签。

Pandas 中的df.iloc 方法。

该方法可以接受的类型有:
整数。例如:5
整数构成的列表或数组。例如:[1, 2, 3]
布尔数组。
可返回索引值的函数或参数。

df.iloc[:3]

在这里插入图片描述

df.iloc[5]

output:
Zip Code 90005.0
Total Population 37681.0
Median Age 33.9
Total Males 19299.0
Total Females 18382.0
Total Households 15044.0
Average Household Size 2.5
Name: 5, dtype: float64

选择多行

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

在这里插入图片描述
错误用法:df.iloc[1, 3, 5]

只确定2-4列

df.iloc[:, 1:4]

在这里插入图片描述

2.基于标签名称选择

df.loc[]
可以接受的类型有:
单个标签。例如:2 或 ‘a’,这里的 2 指的是标签而不是索引位置。
列表或数组包含的标签。例如:[‘A’, ‘B’, ‘C’]。
切片对象。例如:‘A’:‘E’,注意这里和上面切片的不同之处,首尾都包含在内。
布尔数组。
可返回标签的函数或参数。

只要前两行

df.loc[0:1]

在这里插入图片描述选择 1,3,5 行:

df.loc[[0, 2, 4]]

在这里插入图片描述选择 2-4 列:

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

在这里插入图片描述选择 1,3 行和 Median Age 后面的列:

df.loc[[0, 2], 'Median Age':]

在这里插入图片描述

五 数据删除

df.drop
使用时指定 labels 标签参数,然后再通过 axis 指定按列或按行删除即可。

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

在这里插入图片描述

df.drop_duplicates()
通常用于数据去重,即剔除数据集中的重复值。指定去除重复值规则,以及 axis
按列还是按行去除即可。

df.dropna
主要的用途是删除缺少值,即数据集中空缺的数据列或行。

六 数据填充

在生产环境中很大几率会遇到的情况就是缺失值。缺失值主要是指数据丢失的现象,也就是数据集中的某一块数据不存在。除此之外、存在但明显不正确的数据也被归为缺失值一类。例如,在一个时间序列数据集中,某一段数据突然发生了时间流错乱,那么这一小块数据就是毫无意义的,可以被归为缺失值。

1.检测缺失值

Pandas 为了更方便地检测缺失值,将不同类型数据的缺失均采用 NaN 标记。这里的 NaN 代表 Not a Number,它仅仅是作为一个标记。例外是,在时间序列里,时间戳的丢失采用 NaT 标记

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,7 行置为缺失值
df.iloc[[1, 3, 5, 7], [0, 2, 4]] = np.nan
# 将 2, 4, 6 列的 2,4,6,8 行置为缺失值
df.iloc[[2, 4, 6, 8], [1, 3, 5]] = np.nan
df

在这里插入图片描述通过 isna()notna() 中的一个即可确定数据集中的缺失值。

df.isna()

在这里插入图片描述
面对缺失值一般就是填充和剔除两项操作。
缺失值剔除的方法 dropna() 已经在上面介绍过了。下面示例填充缺失值 fillna() 方法。

df.fillna(0)

在这里插入图片描述除了直接填充值,我们还可以通过参数,将缺失值前面或者后面的值填充给相应的缺失值。
例如使用缺失值前面的值进行填充:

df.fillna(method='pad')

在这里插入图片描述

或者是后面的值:

df.fillna(method='bfill')

在这里插入图片描述
如果存在连续的缺失值是怎样的情况呢?首先,我们将数据集的第 2,4 ,6 列的第 3,5 行也置为缺失值。

df.iloc[[3, 5], [1, 3, 5]] = np.nan

然后来正向填充:

df.fillna(method='pad')

在这里插入图片描述
可以看到,连续缺失值也是按照前序数值进行填充的,并且完全填充。这里,我们可以通过 limit= 参数设置连续填充的限制数量。

df.fillna(method='pad', limit=1)  # 最多填充一项

在这里插入图片描述
除了上面的填充方式,还可以通过 Pandas 自带的求平均值方法等来填充特定列或行
对 C 列到 E 列用平均值填充。

df.fillna(df.mean()['C':'E'])

七 插值填充

插值是数值分析中一种方法。简而言之,就是借助于一个函数(线性或非线性),再根据已知数据去求解未知数据的值。插值在数据领域非常常见,它的好处在于,可以尽量去还原数据本身的样子。可以通过 interpolate() 方法完成线性插值。当然,其他一些插值算法可以阅读官方文档了解。

生成数据

#生成一个 DataFrame
df = pd.DataFrame({'A': [1.1, 2.2, np.nan, 4.5, 5.7, 6.9],
                   'B': [.21, np.nan, np.nan, 3.1, 11.7, 13.2]})
df

在这里插入图片描述
插值

df_interpolate = df.interpolate()
df_interpolate

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值