Python Pandas教程:DataFrame、日期范围和用法
⚡ 智能摘要
Pandas 是开源的 Python 用于处理表格数据的库。它提供了 Series 和 DataFrame 结构、日期范围、检查辅助函数以及本教程中演示的切片、删除、连接、排序和重命名操作。

熊猫是什么? Python?
熊猫 是一个开源库,可让您在以下环境中执行数据操作和分析: Python它涵盖了数值表格和时间序列等各种数据处理方式。它提供了一种创建、操作和整理数据的简便方法,并且它构建于……之上。 NumPy的因此,Pandas 要运行,必须先有 NumPy。
为什么要使用 Pandas?
数据科学家利用 Pandas Python 具有以下优点:
- 轻松处理缺失数据
- 它使用 Series 处理一维数据,使用 DataFrame 处理多维数据。
- 它提供了一种有效的数据切片方法
- 它提供了一种灵活的方式来合并、连接或重塑数据
- 它包含一个强大的时间序列工具包。
简而言之,Pandas 提供强大易用的数据结构以及快速操作这些数据结构的方法,因此它成为大多数编程语言的核心。 Python 数据分析 工作。
如何安装 Pandas
Pandas 随 Anaconda 和大多数托管笔记本服务一起提供,因此通常已安装。如果导入失败,可以使用以下命令之一添加它。环境内置 如何安装 TensorFlow 还包含熊猫。
- pip:
pip install pandas - 蟒蛇:
conda install -c anaconda pandas - 里面一个 Jupyter 笔记本 手机:
import sys !conda install --yes --prefix {sys.prefix} pandas
什么是 Pandas 数据框?
Pandas DataFrame 是一种二维带标签的数据结构,其列可以包含不同类型的数据。它是以表格格式存储数据的标准方法:行存储观测值,列命名相关信息。例如: 车资 可以是列名,2、3、4 可以是价格值。
数据框对于统计学家和其他数据从业人员来说并不陌生。下图展示了数据框的形状——侧边是带有标签的行索引,顶部是带有名称的列。
什么是系列?
Series 是一种一维数据结构。它可以存储任何数据类型,例如整数、浮点数或字符串,当您需要执行计算或返回一维数组时非常有用。根据定义,Series 不能包含多列;如果需要多列,请使用 DataFrame 结构。
Pandas Series 构造函数接受以下参数:
- 日期: 可以是列表、字典或标量值
pd.Series([1., 2., 3.])
0 1.0 1 2.0 2 3.0 dtype: float64
您可以使用以下方式添加索引 index它为行命名,其长度必须等于列的大小。
pd.Series([1., 2., 3.], index=['a', 'b', 'c'])
下面您创建了一个 Pandas Series,其中第三行存在缺失值。缺失值 Python 显示在 NaN和 np.nan NumPy 会人为地创建一个这样的对象。
pd.Series([1,2,np.nan])
输出
0 1.0 1 2.0 2 NaN dtype: float64
创建 Pandas DataFrame
您可以使用以下命令将 NumPy 数组转换为 DataFrame: pd.DataFrame()反过来也可以:要将 DataFrame 转换回数组,请使用 np.array() 或 df.to_numpy()这也是 Pandas 官方文档所推荐的做法。
## Numpy to pandas import numpy as np h = [[1,2],[3,4]] df_h = pd.DataFrame(h) print('Data Frame:', df_h) ## Pandas to numpy df_h_n = np.array(df_h) print('Numpy array:', df_h_n) Data Frame: 0 1 0 1 2 1 3 4 Numpy array: [[1 2] [3 4]]
字典作为输入同样有效 pd.DataFrame().
dic = {'Name': ["John", "Smith"], 'Age': [30, 40]}
pd.DataFrame(data=dic)
| 车龄 | 姓名 | |
|---|---|---|
| 0 | 30 | John |
| 1 | 40 | SMITH |
熊猫范围数据
Pandas 提供了一个便捷的 API 来创建日期范围,该范围将作为时间序列的索引。调用方式如下:
pd.date_range(start, periods, freq):
- 第一个参数是开始日期
- 第二个参数是周期数(如果指定了结束日期,则可选)
- 最后一个参数是频率:天
D, 月M和年份Y
## Create date # Days dates_d = pd.date_range('20300101', periods=6, freq='D') print('Day:', dates_d)
输出
Day: DatetimeIndex(['2030-01-01', '2030-01-02', '2030-01-03', '2030-01-04', '2030-01-05', '2030-01-06'], dtype='datetime64[ns]', freq='D')
# Months dates_m = pd.date_range('20300101', periods=6, freq='M') print('Month:', dates_m)
输出
Month: DatetimeIndex(['2030-01-31', '2030-02-28', '2030-03-31', '2030-04-30','2030-05-31', '2030-06-30'], dtype='datetime64[ns]', freq='M')
版本说明: 月份别名 M 上述方法已从 Pandas 2.2 开始弃用,并在 Pandas 3.0 中移除。在当前版本中,此方法无效。 freq='ME' 月末指数相同。
检查数据
您可以使用以下命令检查数据集的头部或尾部 head() or tail() 调用 DataFrame,如下面的 Pandas 示例所示。
步骤1) 使用 NumPy 创建一个随机序列。该序列有 4 列和 6 行。
random = np.random.randn(6,4)
步骤2) 然后使用 Pandas 创建一个 DataFrame。
绝大部分储备使用 dates_m 以日期作为索引,因此每一行都对应一个日期,并将4列命名为 columns 论据。
# Create data with date df = pd.DataFrame(random, index=dates_m, columns=list('ABCD'))
计划 np.random.randn() 如果不使用种子运行,得到的结果将与此处打印的结果不同。 np.random.seed(0) 首先,如果你想重现一个固定的数据集。
步骤3) 使用头部功能
df.head(3)
| A | B | C | D | |
|---|---|---|---|---|
| 2030-01-31 | 1.139433 | 1.318510 | -0.181334 | 1.615822 |
| 2030-02-28 | -0.081995 | -0.063582 | 0.857751 | -0.527374 |
| 2030-03-31 | -0.519179 | 0.080984 | -1.454334 | 1.314947 |
步骤4) 使用尾部函数
df.tail(3)
| A | B | C | D | |
|---|---|---|---|---|
| 2030-04-30 | -0.685448 | -0.011736 | 0.622172 | 0.104993 |
| 2030-05-31 | -0.935888 | -0.731787 | -0.558729 | 0.768774 |
| 2030-06-30 | 1.096981 | 0.949180 | -0.196901 | -0.471556 |
步骤5) 获取数据线索的一个绝佳方法是…… describe()它报告数据集的计数、平均值、标准差、最小值、最大值和百分位数。
df.describe()
| A | B | C | D | |
|---|---|---|---|---|
| 数 | 6.000000 | 6.000000 | 6.000000 | 6.000000 |
| 意味着 | 0.002317 | 0.256928 | -0.151896 | 0.467601 |
| STD | 0.908145 | 0.746939 | 0.834664 | 0.908910 |
| 分钟 | -0.935888 | -0.731787 | -1.454334 | -0.527374 |
| 25% | -0.643880 | -0.050621 | -0.468272 | -0.327419 |
| 50% | -0.300587 | 0.034624 | -0.189118 | 0.436883 |
| 75% | 0.802237 | 0.732131 | 0.421296 | 1.178404 |
| 最大 | 1.139433 | 1.318510 | 0.857751 | 1.615822 |
切片数据
切片操作可以从 DataFrame 中提取一部分行或列。您可以使用列名来指定切片类型。trac如下 Pandas 示例所示,只有一列。
## Slice ### Using name df['A'] 2030-01-31 -0.168655 2030-02-28 0.689585 2030-03-31 0.767534 2030-04-30 0.557299 2030-05-31 -1.547836 2030-06-30 0.511551 Freq: M, Name: A, dtype: float64
要选择多列,需要使用双括号。 [[..,..]]第一组参数表示要选择列;第二组参数指定要返回哪些列。
df[['A', 'B']]
| A | B | |
|---|---|---|
| 2030-01-31 | -0.168655 | 0.587590 |
| 2030-02-28 | 0.689585 | 0.998266 |
| 2030-03-31 | 0.767534 | -0.940617 |
| 2030-04-30 | 0.557299 | 0.507350 |
| 2030-05-31 | -1.547836 | 1.276558 |
| 2030-06-30 | 0.511551 | 1.572085 |
您可以使用冒号对行进行切片。以下代码返回前三行。
### using a slice for row
df[0:3]
| A | B | C | D | |
|---|---|---|---|---|
| 2030-01-31 | -0.168655 | 0.587590 | 0.572301 | -0.031827 |
| 2030-02-28 | 0.689585 | 0.998266 | 1.164690 | 0.475975 |
| 2030-03-31 | 0.767534 | -0.940617 | 0.227255 | -0.341532 |
此 loc 访问器按名称选择列。与往常一样,逗号前的值代表行,逗号后的值代表列,需要用方括号括起来才能选择多列。
## Multi col df.loc[:,['A','B']]
| A | B | |
|---|---|---|
| 2030-01-31 | -0.168655 | 0.587590 |
| 2030-02-28 | 0.689585 | 0.998266 |
| 2030-03-31 | 0.767534 | -0.940617 |
| 2030-04-30 | 0.557299 | 0.507350 |
| 2030-05-31 | -1.547836 | 1.276558 |
| 2030-06-30 | 0.511551 | 1.572085 |
还有另一种选择多行和多列的方法。 iloc[] 它使用整数位置而不是列名,因此下面的代码返回与上面相同的 DataFrame。
df.iloc[:, :2]
| A | B | |
|---|---|---|
| 2030-01-31 | -0.168655 | 0.587590 |
| 2030-02-28 | 0.689585 | 0.998266 |
| 2030-03-31 | 0.767534 | -0.940617 |
| 2030-04-30 | 0.557299 | 0.507350 |
| 2030-05-31 | -1.547836 | 1.276558 |
| 2030-06-30 | 0.511551 | 1.572085 |
删除列
您可以使用以下命令删除列 df.drop()传递名称 columns 论据。
df.drop(columns=['A', 'C'])
| B | D | |
|---|---|---|
| 2030-01-31 | 0.587590 | -0.031827 |
| 2030-02-28 | 0.998266 | 0.475975 |
| 2030-03-31 | -0.940617 | -0.341532 |
| 2030-04-30 | 0.507350 | -0.296035 |
| 2030-05-31 | 1.276558 | 0.523017 |
| 2030-06-30 | 1.572085 | -0.594772 |
级联
你可以用以下方式连接两个数据框: pd.concat()首先创建两个框架。
import numpy as np df1 = pd.DataFrame({'name': ['John', 'Smith','Paul'], 'Age': ['25', '30', '50']}, index=[0, 1, 2]) df2 = pd.DataFrame({'name': ['Adam', 'Smith' ], 'Age': ['26', '11']}, index=[3, 4])
然后将它们连接起来。
df_concat = pd.concat([df1,df2]) df_concat
| 车龄 | 姓名 | |
|---|---|---|
| 0 | 25 | John |
| 1 | 30 | SMITH |
| 2 | 50 | 保罗 |
| 3 | 26 | Adam |
| 4 | 11 | SMITH |
删除重复项
当数据集包含重复信息时, drop_duplicates() 是一种排除重复行的简便方法。 df_concat 包含重复观测值: Smith 出现两次 name 列。
df_concat.drop_duplicates('name')
| 车龄 | 姓名 | |
|---|---|---|
| 0 | 25 | John |
| 1 | 30 | SMITH |
| 2 | 50 | 保罗 |
| 3 | 26 | Adam |
排序值
您可以使用以下方式对帧进行排序 sort_values()。 注意 Age 此处以文本形式创建,因此行按字符串顺序排序。
df_concat.sort_values('Age')
| 车龄 | 姓名 | |
|---|---|---|
| 4 | 11 | SMITH |
| 0 | 25 | John |
| 3 | 26 | Adam |
| 1 | 30 | SMITH |
| 2 | 50 | 保罗 |
重命名列
绝大部分储备使用 rename() 在 Pandas 中重命名列。每对参数中,第一个值是当前列名,第二个值是新列名。
df_concat.rename(columns={"name": "Surname", "Age": "Age_ppl"})
| Age_ppl | 姓 | |
|---|---|---|
| 0 | 25 | John |
| 1 | 30 | SMITH |
| 2 | 50 | 保罗 |
| 3 | 26 | Adam |
| 4 | 11 | SMITH |
Pandas 方法快速参考
此表将每个常见任务映射到执行该任务的 Pandas 方法。
| 任务 | 付款方式 |
|---|---|
| 汇入资料 | 读取_csv |
| 创建系列 | 系列 |
| 创建数据框 | 数据框 |
| 创建日期范围 | 日期范围 |
| 返回头 | 头 |
| 返回尾部 | 尾巴 |
| 描述 | 描述 |
| 使用名称进行切片 | 数据名称['列名'] |
| 使用行进行切片 | 数据名称[0:5] |

