Python Pandas教程:DataFrame、日期范围和用法

⚡ 智能摘要

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

  • 🔘 基于 NumPy 构建: Pandas 需要 NumPy,NumPy 为每个 Series 和 DataFrame 提供数组。
  • ☑️ 两种结构: Series 存储一个带标签的维度;DataFrame 存储混合类型的行和列。
  • 日期范围: pd.date_range() 根据开始日期、周期数和频率构建索引。
  • 🧪 先检查: head()、tail() 和 describe() 在任何分析之前揭示形状、分布和百分位数。
  • 🛠️ 精确切片: 括号名称选择列,loc 按标签选择,iloc 按位置选择。
  • ⚠️ 版本说明: 从 Pandas 2.2 开始,频率别名 M 已被弃用;当前版本期望使用 ME。

Python Pandas教程:DataFrame、日期范围和Pandas的用法

熊猫是什么? 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 可以是价格值。

数据框对于统计学家和其他数据从业人员来说并不陌生。下图展示了数据框的形状——侧边是带有标签的行索引,顶部是带有名称的列。

Pandas DataFrame 布局,带有带标签的行索引和命名列。

什么是系列?

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 显示在 NaNnp.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]

常见问题

电话联系 pd.read_csv() 带有路径或 URL. 添加名称以标记列,sep 用于不同的分隔符,usecols 用于仅保留所需的列。

isnull() 函数会标记缺失值,dropna() 函数会删除受影响的行或列,fillna() 函数会用常量或统计量(例如列均值)替换缺失值。缺失值会显示为 NaN。

groupby() 按键列将行分成组,对每个组应用聚合(例如计数、总和或平均值),然后将结果合并到一个新的框架中。

构建一个布尔掩码并将其放在方括号中传递,例如 `df[df.Age == 30]`。使用 & 符号和竖线运算符组合掩码,并进行包装。ping 括号内为各项比较结果。

pd.merge() 以某种方式按键列匹配行 SQL join 函数会根据设置将其转换为 inner、left、right 或 outer。concat() 函数会堆叠帧,而不是匹配键。

`df.to_csv('out.csv', index=False)` 会写入一个逗号分隔的文件,而 `df.to_excel('out.xlsx')` 会写入一个工作表。ping 该索引避免了下次读取时出现未命名的第一列。

AI 助手会对新数据框进行分析,建议值得运行的 describe、groupby 和 plot 函数调用,并标记数据类型特殊或存在大量空值的列。请务必使用原始数据验证每一项建议。

是的。 GitHub 副驾驶 将一条普通的注释转换成可运行的 Pandas 代码。 Jupyter 细胞。 Rev在信任结果之前,请先查看数据类型和行数。

总结一下这篇文章: