Pandas简介
Pandas 是 Python 语言的一个扩展程序库,用于数据分析。
Pandas 提供了易于使用的数据结构和数据分析工具,特别适用于处理结构化数据,如表格型数据(类似于Excel表格)。
Pandas 是数据科学和分析领域中常用的工具之一,它使得用户能够轻松地从各种数据源中导入数据,并对数据进行高效的操作和分析。
数据结构
Pandas 主要引入了两种新的数据结构:Series 和 DataFrame。
Series
Series 是 Pandas 中的一个核心数据结构,类似于一个一维的数组,具有数据和索引。
Series 可以存储任何数据类型(整数、浮点数、字符串等),并通过标签(索引)来访问元素。
Series 的数据结构是非常有用的,因为它可以处理各种数据类型,同时保持了高效的数据操作能力,比如可以通过标签来快速访问和操作数据。
可以使用 Pandas 库来创建一个 Series 对象,并且可以为其指定索引(Index)、名称(Name)以及值(Values):

创建Series
pandas.Series(data=None, index=None, dtype=None, name=None, copy=False, fastpath=False)
参数说明:
- data:Series 的数据部分,可以是列表、数组、字典、标量值等。如果不提供此参数,则创建一个空的 Series。
- index:Series 的索引部分,用于对数据进行标记。可以是列表、数组、索引对象等。如果不提供此参数,则创建一个默认的整数索引。
- dtype:指定 Series 的数据类型。可以是 NumPy 的数据类型,例如 np.int64、np.float64 等。如果不提供此参数,则根据数据自动推断数据类型。
- name:Series 的名称,用于标识 Series 对象。如果提供了此参数,则创建的 Series 对象将具有指定的名称。
- copy:是否复制数据。默认为 False,表示不复制数据。如果设置为 True,则复制输入的数据。
- fastpath:是否启用快速路径。默认为 False。启用快速路径可能会在某些情况下提高性能。
import pandas as pd
# 创建一个Series对象,指定名称为'A',值分别为1, 2, 3, 4
# 默认索引为0, 1, 2, 3
series = pd.Series([1, 2, 3, 4], name='A')
# 显示Series对象
print(series)
# 如果你想要显式地设置索引,可以这样做:
custom_index = [1, 2, 3, 4] # 自定义索引
series_with_index = pd.Series([1, 2, 3, 4], index=custom_index, name='A')
# 显示带有自定义索引的Series对象
print(series_with_index)
输出结果:
0 1
1 2
2 3
3 4
Name: A, dtype: int64
1 1
2 2
3 3
4 4
Name: A, dtype: int64
Series 方法
| 方法名称 | 功能描述 |
|---|---|
| index | 获取 Series 的索引 |
| values | 获取 Series 的数据部分(返回 NumPy 数组) |
| head(n) | 返回 Series 的前 n 行(默认为 5) |
| tail(n) | 返回 Series 的后 n 行(默认为 5) |
| dtype | 返回 Series 中数据的类型 |
| shape | 返回 Series 的形状(行数) |
| describe() | 返回 Series 的统计描述(如均值、标准差、最小值等) |
| isnull() | 返回一个布尔 Series,表示每个元素是否为 NaN |
| notnull() | 返回一个布尔 Series,表示每个元素是否不是 NaN |
| unique() | 返回 Series 中的唯一值(去重) |
| value_counts() | 返回 Series 中每个唯一值的出现次数 |
| map(func) | 将指定函数应用于 Series 中的每个元素 |
| apply(func) | 将指定函数应用于 Series 中的每个元素,常用于自定义操作 |
| astype(dtype) | 将 Series 转换为指定的类型 |
| sort_values() | 对 Series 中的元素进行排序(按值排序) |
| sort_index() | 对 Series 的索引进行排序 |
| dropna() | 删除 Series 中的缺失值(NaN) |
| fillna(value) | 填充 Series 中的缺失值(NaN) |
| replace(to_replace, value) | 替换 Series 中指定的值 |
| cumsum() | 返回 Series 的累计求和 |
| cumprod() | 返回 Series 的累计乘积 |
| shift(periods) | 将 Series 中的元素按指定的步数进行位移 |
| rank() | 返回 Series 中元素的排名 |
| corr(other) | 计算 Series 与另一个 Series 的相关性(皮尔逊相关系数) |
| cov(other) | 计算 Series 与另一个 Series 的协方差 |
| to_list() | 将 Series 转换为 Python 列表 |
| to_frame() | 将 Series 转换为 DataFrame |
| iloc[] | 通过位置索引来选择数据 |
| loc[] | 通过标签索引来选择数据 |
DataFrame
类似于一个二维表格,它是 Pandas 中最重要的数据结构。DataFrame 可以看作是由多个 Series 按列排列构成的表格,它既有行索引也有列索引,因此可以方便地进行行列选择、过滤、合并等操作。

多个Series组合得到DataFrame:

创建DataFrame
pandas.DataFrame(data=None, index=None, columns=None, dtype=None, copy=False)
参数说明:
- data:DataFrame 的数据部分,可以是字典、二维数组、Series、DataFrame 或其他可转换为 DataFrame 的对象。如果不提供此参数,则创建一个空的 DataFrame。
- index:DataFrame 的行索引,用于标识每行数据。可以是列表、数组、索引对象等。如果不提供此参数,则创建一个默认的整数索引。
- columns:DataFrame 的列索引,用于标识每列数据。可以是列表、数组、索引对象等。如果不提供此参数,则创建一个默认的整数索引。
- dtype:指定 DataFrame 的数据类型。可以是 NumPy 的数据类型,例如 np.int64、np.float64 等。如果不提供此参数,则根据数据自动推断数据类型。
- copy:是否复制数据。默认为 False,表示不复制数据。如果设置为 True,则复制输入的数据。
import pandas as pd
data = [['Google', 10], ['Runoob', 12], ['Wiki', 13]]
# 创建DataFrame
df = pd.DataFrame(data, columns=['Site', 'Age'])
# 使用astype方法设置每列的数据类型
df['Site'] = df['Site'].astype(str)
df['Age'] = df['Age'].astype(float)
print(df)
也可以使用字典来创建:
import pandas as pd
data = {'Site':['Google', 'Runoob', 'Wiki'], 'Age':[10, 12, 13]}
df = pd.DataFrame(data)
print (df)
DataFrame方法
| 方法名称 | 功能描述 |
|---|---|
| head(n) | 返回 DataFrame 的前 n 行数据(默认前 5 行) |
| tail(n) | 返回 DataFrame 的后 n 行数据(默认后 5 行) |
| info() | 显示 DataFrame 的简要信息,包括列名、数据类型、非空值数量等 |
| describe() | 返回 DataFrame 数值列的统计信息,如均值、标准差、最小值等 |
| shape | 返回 DataFrame 的行数和列数(行数, 列数) |
| columns | 返回 DataFrame 的所有列名 |
| index | 返回 DataFrame 的行索引 |
| dtypes | 返回每一列的数值数据类型 |
| sort_values(by) | 按照指定列排序 |
| sort_index() | 按行索引排序 |
| dropna() | 删除含有缺失值(NaN)的行或列 |
| fillna(value) | 用指定的值填充缺失值 |
| isnull() | 判断缺失值,返回一个布尔值 DataFrame |
| notnull() | 判断非缺失值,返回一个布尔值 DataFrame |
| loc[] | 按标签索引选择数据 |
| iloc[] | 按位置索引选择数据 |
| at[] | 访问 DataFrame 中单个元素(比 loc[] 更高效) |
| iat[] | 访问 DataFrame 中单个元素(比 iloc[] 更高效) |
| apply(func) | 对 DataFrame 或 Series 应用一个函数 |
| applymap(func) | 对 DataFrame 的每个元素应用函数(仅对 DataFrame) |
| groupby(by) | 分组操作,用于按某一列分组进行汇总统计 |
| pivot_table() | 创建透视表 |
| merge() | 合并多个 DataFrame(类似 SQL 的 JOIN 操作) |
| concat() | 按行或按列连接多个 DataFrame |
| to_csv() | 将 DataFrame 导出为 CSV 文件 |
| to_excel() | 将 DataFrame 导出为 Excel 文件 |
| to_json() | 将 DataFrame 导出为 JSON 格式 |
| to_sql() | 将 DataFrame 导出为 SQL 数据库 |
| query() | 使用 SQL 风格的语法查询 DataFrame |
| duplicated() | 返回布尔值 DataFrame,指示每行是否是重复的 |
| drop_duplicates() | 删除重复的行 |
| set_index() | 设置 DataFrame 的索引 |
| reset_index() | 重置 DataFrame 的索引 |
| transpose() | 转置 DataFrame(行列交换) |
常用函数
读取数据
| 函数 | 说明 |
|---|---|
| pd.read_csv(filename) | 读取 CSV 文件; |
| pd.read_excel(filename) | 读取 Excel 文件; |
| pd.read_sql(query, connection_object) | 从 SQL 数据库读取数据; |
| pd.read_json(json_string) | 从 JSON 字符串中读取数据; |
| pd.read_html(url) | 从 HTML 页面中读取数据。 |
import pandas as pd
# 从 CSV 文件中读取数据
df = pd.read_csv('data.csv')
# 从 Excel 文件中读取数据
df = pd.read_excel('data.xlsx')
# 从 SQL 数据库中读取数据
import sqlite3
conn = sqlite3.connect('database.db')
df = pd.read_sql('SELECT * FROM table_name', conn)
# 从 JSON 字符串中读取数据
json_string = '{"name": "John", "age": 30, "city": "New York"}'
df = pd.read_json(json_string)
# 从 HTML 页面中读取数据
url = 'http://www.xxx.com'
dfs = pd.read_html(url)
df = dfs[0] # 选择第一个数据框
查看数据
| 函数 | 说明 |
|---|---|
| df.head(n) | 显示前 n 行数据; |
| df.tail(n) | 显示后 n 行数据; |
| df.info() | 显示数据的信息,包括列名、数据类型、缺失值等; |
| df.describe() | 显示数据的基本统计信息,包括均值、方差、最大值、最小值等; |
| df.shape | 显示数据的行数和列数。 |
数据清洗
| 函数 | 说明 |
|---|---|
| df.dropna() | 删除包含缺失值的行或列; |
| df.fillna(value) | 将缺失值替换为指定的值; |
| df.replace(old_value, new_value) | 将指定值替换为新值; |
| df.duplicated() | 检查是否有重复的数据; |
| df.drop_duplicates() | 删除重复的数据。 |
数据选择和切片
| 函数 | 说明 |
|---|---|
| df[column_name] | 选择指定的列; |
| df.loc[row_index, column_name] | 通过标签选择数据; |
| df.iloc[row_index, column_index] | 通过位置选择数据; |
| df.ix[row_index, column_name] | 通过标签或位置选择数据; |
| df.filter(items=[column_name1, column_name2]) | 选择指定的列; |
| df.filter(regex=‘regex’) | 选择列名匹配正则表达式的列; |
| df.sample(n) | 随机选择 n 行数据。 |
| df[df[‘column_name’] > value] | 选择列中满足条件的行。 |
| df.query(‘column_name > value’) | 使用字符串表达式选择列中满足条件的行。 |
数据排序
| 函数 | 说明 |
|---|---|
| df.sort_values(column_name) | 按照指定列的值排序; |
| df.sort_values([column_name1, column_name2], ascending=[True, False]) | 按照多个列的值排序; |
| df.sort_index() | 按照索引排序。 |
数据分组和聚合
聚合是将数据按某些规则进行汇总,通常是对某些列的数据进行求和、求平均数、求最大值、求最小值等操作。Pandas 提供了groupby()方法来对数据进行分组,然后应用不同的聚合函数。
- groupby():按某些列分组。
- 聚合函数:如 sum(), mean(), count(), min(), max(), std() 等
| 函数 | 说明 | 示例 |
|---|---|---|
| df.groupby(by).agg() | 按指定列(by)进行分组,agg() 可以传入不同的聚合函数,进行多种操作 | df.groupby(‘Department’).agg({‘Salary’: ‘mean’}) df.groupby(‘Department’)[‘Salary’].sum() |
| df.groupby(by).agg([func1, func2]) | 可以对同一列应用多个聚合函数,返回多种聚合结果 | f.groupby(‘Department’).agg({‘Salary’: [‘mean’, ‘sum’]}) |
数据合并
| 函数 | 说明 |
|---|---|
| pd.concat([df1, df2]) 将多个数据框按照行或列进行合并; | |
| pd.merge(df1, df2, on=column_name) | 按照指定列将两个数据框进行合并。 |
数据统计和描述
| 函数 | 说明 |
|---|---|
| df.describe() | 计算基本统计信息,如均值、标准差、最小值、最大值等。 |
| df.mean() | 计算每列的平均值。 |
| df.median() | 计算每列的中位数。 |
| df.mode() | 计算每列的众数。 |
| df.count() | 计算每列非缺失值的数量。 |
数据可视化
Pandas 提供了与 Matplotlib 和 Seaborn 等可视化库的集成,使得数据的可视化变得简单而高效。
在 Pandas 中,数据可视化功能主要通过 DataFrame.plot() 和 Series.plot() 方法实现,这些方法实际上是对 Matplotlib 库的封装,简化了图表的绘制过程。
基本的 plot() 方法
| 参数 | 说明 |
|---|---|
| kind | 图表类型,支持 ‘line’, ‘bar’, ‘barh’, ‘hist’, ‘box’, ‘kde’, ‘density’, ‘area’, ‘pie’ 等类型 |
| x | 设置 x 轴的数据列 |
| y | 设置 y 轴的数据列 |
| title | 图表的标题 |
| xlabel | x 轴的标签 |
| ylabel | y 轴的标签 |
| color | 设置图表的颜色 |
| figsize | 设置图表的大小(宽, 高) |
| legend | 是否显示图例 |
常用图表类型
| 图表类型 | 描述 | 常用用法 |
|---|---|---|
| 折线图 | 用于显示随时间变化的数据趋势 | df.plot(kind=‘line’) |
| 柱状图 | 用于显示类别之间的比较数据 | df.plot(kind=‘bar’) |
| 水平柱状图 与柱状图类似,但柱子是水平的 | df.plot(kind=‘barh’) | |
| 直方图 | 用于显示数据的分布(频率分布) | df.plot(kind=‘hist’) |
| 散点图 | 用于显示两个数值变量之间的关系 | df.plot(kind=‘scatter’, x=‘col1’, y=‘col2’) |
| 箱线图 | 用于显示数据的分布、异常值及四分位数 | df.plot(kind=‘box’) |
| 密度图 | 用于显示数据的密度分布 | df.plot(kind=‘kde’) |
| 饼图 | 用于显示各部分占总体的比例 | df.plot(kind=‘pie’) |
| 区域图 | 用于显示累计数值的图表(类似于折线图,但填充了颜色) | df.plot(kind=‘area’) |
# 折线图
import pandas as pd
import matplotlib.pyplot as plt
# 示例数据
data = {'Year': [2015, 2016, 2017, 2018, 2019, 2020],
'Sales': [100, 150, 200, 250, 300, 350]}
df = pd.DataFrame(data)
# 绘制折线图
df.plot(kind='line', x='Year', y='Sales', title='Sales Over Years', xlabel='Year', ylabel='Sales', figsize=(10, 6))
plt.show()
1028

被折叠的 条评论
为什么被折叠?



