Python教程

PYTHON数据分析-Pandas学习

本文主要是介绍PYTHON数据分析-Pandas学习,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

引言

要想知道每个函数的具体用法,最好的办法还是浏览官方库

Input/output — pandas 1.3.2 documentation (pydata.org)

Pandas: 强大的 Python 数据分析支持库 | Pandas 中文 (pypandas.cn)

Series

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

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

像字典一样,可以直接通过键值提取数据 生成时,默认的键值是0,1,2,3...

与Dataframe有一点明显的不同,Series支持数字索引提取行(大概是只有一列的缘故)

image

常用操作

增删改查

拼接元素

image

删除元素

image

Series运算

对于Series的加减乘除来说是按照索引对齐的

image

此外的方法还有

s4.add(s3)# 加
s4.sub(s3)# 减
s4.mul(s3)# 乘
s4.div(s3)# 除
s4.median()# 中位
s4.sum()# 和
s4.max()# 最大
s4.min()# 最小

DataFrame

DataFrame 是 Pandas 中最为常见、最重要且使用频率最高的数据结构。DataFrame 和平常的电子表 格或 SQL 表结构相似。你可以把 DataFrame 看成是 Series 的扩展类型,它仿佛是由多个 Series 拼合而 成。它和 Series 的直观区别在于,数据不但具有行索引,且具有列索引。

DataFrame 基本结构如下:

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

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

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

文件的IO读取

Input/output — pandas 1.3.2 documentation (pydata.org)

csv文件

#写入
pandas.read_csv()
#读取
df.to_csv('animal.csv')

excel文件

pd.read_excel('animal.xlsx', 'Sheet1', index_col=None, na_values=['NA'])
df3.to_excel('animal.xlsx', sheet_name='Sheet1')

文件的预览

#显示头几行
df.head()
#显示后几行
df.tail()
#显示大致的描述
df.describe()

image

基于索引的访问

基于数字的索引

单个数字作为索引用来选取一行

image

基于列表的多行访问

image

基于切片的列访问

image

基于切片的行列访问

image

基于标签名的访问

df.loc[] 可以接受的类型有:

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

image

data.列名在列名中没有点的时候也可以用

对dataframe信息进行筛选

通过逻辑表达式可以对dataframe中的内容进行筛选

image

image

生成副本

# 生成 DataFrame 副本,方便数据集被多个不同流程使用
df3 = df2.copy()
df3

添加行/列

data['id'] = np.arange(len(data))

image

可见数据集多了一列

数值替换

利用map方法实现值的替换

data['is_ji'] = data['is_ji'].map({0: True,1: False})

利用一行代码进行0-1到True-False的变换

image

image

数据的删除

虽然我们可以通过数据选择方法从一个完整的数据集中拿到我们需要的数据,但有的时候直接删除 不需要的数据更加简单直接。Pandas 中,以 .drop 开头的方法都与数据删减有关。

DataFrame.drop 可以直接去掉数据集中指定的列和行。一般在使用时,我们指定 labels 标签 参数,然后再通过 axis 指定按列或按行删除即可。当然,你也可以通过索引参数删除数据,具体查看 官方文档。

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

DataFrame.drop_duplicates 则通常用于数据去重,即剔除数据集中的重复值。使用方法非常 简单,指定去除重复值规则,以及 axis 按列还是按行去除即可。

 df.drop_duplicates()

image

可以看到利用此方法去掉了缺失值

除此之外,另一个用于数据删减的方法 DataFrame.dropna 也十分常用,其主要的用途是删除缺 少值,即数据集中空缺的数据列或行。

 df.dropna()

缺失值的处理

检测缺失值

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

Pandas 中用于检测缺失值主要用到两个方法,分别是: isna() 和 notna() ,故名思意就是 「是缺失值」和「不是缺失值」。默认会返回布尔值用于判断。

image

data.isna()生成的是一个布尔型的数组,所以可以用data.isna().describe()来判断空缺值的数目

image

填充缺失值

填入确定的值
df.fillna(0)

此方法直接把缺失值填为0

填入周围的值

其中,limit参数表示最多向前寻找的数目

df.fillna(method='pad', limit=1) df.fillna(method='bfill')
平均值填充
df.fillna(df.mean()['C':'E'])
插值填充
df_interpolate = df.interpolate()df_interpolate

对于 interpolate() 支持的插值算法,也就是 method= 。下面给出几条选择的建议:

  1. 如果你的数据增长速率越来越快,可以选择 method='quadratic' 二次插值。

  2. 如果数据集呈现出累计分布的样子,推荐选择 method='pchip' 。

  3. 如果需要填补缺省值,以平滑绘图为目标,推荐选择 method='akima' 。

    当然,最后提到的 method='akima' ,需要你的环境中安装了 Scipy 库。除此之外,method='barycentric' 和 method='pchip' 同样也需要 Scipy 才能使用。

特征提取有关

数据归一化

有时候,DataFrame 中不同列之间的数据差距太大,需要对其进行归一化处理。 其中,Max-Min 归一化是简单而常见的一种方式,公式如下:

def normalization(df):	numerator = df.sub(df.min())	denominator = (df.max()).sub(df.min())	Y = numerator.div(denominator)	return Y

类型变量

类型变量是指这个变量的不同值仅仅表达不同的类型,值的大小不同但没有高低之分。

有很多变量都属于类型变量,例如 season=1,2,3,4 代表四季。

我们不能将 season 变量直接输入到神经网络,这是因为 season 数值越高并不表示相应的信号强度 越大。

解决方案是将类型变量用一个“一位热码“(one-hot)来编码,也就是:

这篇关于PYTHON数据分析-Pandas学习的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!