pandas 库

  • Pandas
  • 创建一个 Series 对象 pd.Series()
  • 创建一个 DataFrame 对象 pd.DataFrame()
  • 数据清洗
  • 缺失值 NaN
  • 查找缺失值 isna()
  • 删除缺失值 dropna()
  • 重复值
  • 查找重复值 df.duplicated()
  • 删除重复值 df.drop_duplicates()
  • 异常值
  • 检查异常值 df.describe()
  • 筛选数据 df = [ df[列名] < num ]
  • 数据整理
  • 转换日期数据 pd.to_datetime()
  • 添加新列 df['要添加的新列的名字']
  • 数据写入 df.to_csv(path, encoding, index)
  • 分组与聚合



 


Pandas

# 导入 pandas 库
import pandas as pd

pandas 的数据结构有 SeriesDataFrame

Series 主要由一组数据及其对应的索引组成。

以下是一个 Series 对象例子:

import pandas as pd
s = pd.Series(['读书', '健身', '余闲', '投资'], index=[0, 1, 2, 3])
print(s)

输出:

0    读书
1    健身
2    余闲
3    投资
dtype: object

左边的数字是索引,右边的是数据。

数据底部的 dtype 指的是,pandas 库中的数据类型,而对应的 object 是 pandas 自定义的字符串类型。
 


创建一个 Series 对象 pd.Series()

import pandas as pd
s = pd.Series(['读书', '健身', '余闲', '投资'], index=[0, 1, 2, 3])  
# pd.Series(data) 创建一个 Series 对象,默认索引是从 0 开始,以 0, 1, 2, 3,… 的形式按序分配给列表中的元素。
print(s)

以上是传入链表来创建 Series 对象,还有传入字典等方式:

data = {'《三国演义》':'罗贯中', '《水浒传》':'施耐庵'}   # 字典
data = 1                                            # 常量
import numpy as np
data = np.array( [1, 2, 3] )                        # n维数组
data = 'hello'                                      # 字符串
s = pd.Series( data )                               # 创建一个 Series 对象

 


创建一个 DataFrame 对象 pd.DataFrame()

DataFrame 对象是一种表格型的数据结构,包含行索引、列索引以及一组数据。

import pandas as pd
data = [['《三国演义》', '罗贯中'], ['《水浒 传》', '施耐庵']]
df = pd.DataFrame(data, columns=['书籍', '作者'], dtype=float)
print(df)

输出:

书籍      作者
0  《三国演义》  罗贯中
1  《水浒 传》   施耐庵

行索引:0、1,列索引:书籍、作者,表格里面的是数据。

创建 DataFrame 对象的方法是:pd.DataFrame()

 


Series 对象和 DataFrame 对象之间的联系就在于:DataFrame 对象可以被看作是由 Series 对象所组成的。

  • series,只是一个一维数据结构,由 index 和 value 组成。
  • dataframe,是一个二维结构,除了拥有 index 和 value 之外,还拥有 column。

df['列索引'] 提取 DataFrame 对象中某一列的数据,其实是一个 Series 对象。

import pandas as pd
data = [['《三国演义》', '罗贯中'], ['《水浒 传》', '施耐庵']]
df = pd.DataFrame(data, columns=['书籍', '作者'], dtype=float)

print(df['书籍'])
print(type(df['书籍']))

输出:

Name: 书籍, dtype: object
<class 'pandas.core.series.Series'>

 


数据清洗

df.info(),显示整体的数据的基本信息,有一个大概的印象。

主要包括:整体数据的总行数、各列数据类型统计、各列的列名、各列总共有多少非空数据、表格占用的系统空间等。
 


缺失值 NaN

当非空数据与数据总量不一致时,说明这份数据有可能存在缺失值,处理这些缺失值的第一步,就是找到它们。

pandas 库前置知识_数据整理


 


查找缺失值 isna()

在 pandas 库中,用 isna() 方法来查找 DataFrame、Series 对象中的缺失值。

df.isna() 返回的是 DataFrame 对象,Series.isna() 返回的就是 Series 对象。

返回对象中的内容都是布尔值:

  • 缺失数据会用 True 来表示
  • False 则代表这里的数据不缺失

对 DataFrame 对象使用 df.head() 方法默认可以查看数据的前 5 行,df.tail() 方法则默认可以查看数据的后 5 行。

pandas 库中,NaN 代表的就是缺失数据。

删除缺失值 dropna()

对于缺失值,最简单的方法就是将含有缺失值的行直接删除。

如果总体的数据量比较大,缺失值占总数据量的比重也比较低,将含有缺失值的行删除后并不会妨碍后续的分析。

当然除了删除之外还有其它处理方法,比如给缺失值填充数据。

在 pandas 库中,用 df.dropna() 会删除 DataFrame、Series 对象中有缺失值的行。

如果我们需要针对某几列的缺失数据进行删除,就需要用到 df.dropna() 的 subset 参数。

df.dropna(subset = ['书籍', '作者'])

 


重复值

 


查找重复值 df.duplicated()

df.duplicated()方法来查找 DataFrame 对象中的重复数据。

返回一个 Series 对象,找出所有重复值。重复为 True,不重复为 False。
 


删除重复值 df.drop_duplicates()
df = df.drop_duplicates()

 


异常值

 


检查异常值 df.describe()

describe() 方法返回出来的统计信息分别代表数值型数据的频数统计、平均值、标准差、最小值、第一四分位数、中位数、第三四分位数以及最大值。

只需要观察最大最小值、平均数、中位数就好,一般异常值都在特殊位置。

筛选数据 df = [ df[列名] < num ]
# 查看单价小于等于 200 的数据,再重新赋值给就能过滤掉所有单价大于 200 的异常值
df = df[ df['单价'] <= 200 ]

 


数据整理

数据整理指的是我们在数据分析前对所需字段(表格的列)进行数据排序、数据转换、数据抽取、数据合并、数据计算等准备操作。
 


转换日期数据 pd.to_datetime()

Python 中有专门储存时间日期的数据类型 —— datetime,我们对日期数据进行操作都需要 TA。

但 Pandas 中的日期数据(如 2021-10-08),日期列数据并不是 datetime 类型,而是 objeect(pandas自定义的字符串类型)。

在 pandas 库中我们可以使用 pd.to_datetime(arg, format) 来将 DataFrame 对象或者 Series 对象的数据类型转换成 datetime 类型。

其中的 arg 参数为我们要转换的数据,它可以是 DataFrame 对象或 Series 对象。

format 参数为 datetime 类型的日期格式,如数据,是以年-月-日的形式出现的,那对应的 format 就是 ‘%Y-%m-%d’。

# 转换日期数据,并设置对应的日期格式
Series = pd.to_datetime(mask_data['日期'], format = '%Y-%m-%d')

将 ‘日期’ 字段转换成 datetime 类型后,我们就可以直接进行增、删、改、查等各种操作。如:

# 提取年份
year_data = Series.dt.year
# 提取月份
month_data = Series.dt.month
# 提取某日
day_data = Series.dt.day

 


添加新列 df[‘要添加的新列的名字’]

df['月份'] = n

 


数据写入 df.to_csv(path, encoding, index)

数据整理完了,写入 csv 文件中。

df.to_csv(path, encoding='utf-8')

 


分组与聚合

分组是指根据一个或多个键将数据拆分为多个组的过程,这里的键可以理解为分组的条件。

聚合指的是任何能够从数组产生标量值的数据转换过程。

分组、聚合操作一般会同时出现,用于计算分组数据的统计值或实现其他功能。

pandas 库前置知识_python_02

除此之外,不只有单层分组聚合操作,还有多层分组聚合操作。

单层分组聚合操作:

pandas 库前置知识_数据整理_03

df = df.groupby('班级')['成绩'].mean()

多层分组聚合操作:

pandas 库前置知识_数据_04

df = df.groupby(['班级', '性别'])['成绩'].mean()