Python Pandas 教程:DataFrame、日期范围、Pandas 的使用
什么是 Pandas Python?
熊猫 是一个开源库,允许你执行数据操作和分析 Python. 熊猫 Python 该库提供针对数值表和时间序列的数据处理和数据操作。Pandas 提供了一种创建、操作和整理数据的简单方法。它建立在 NumPy 之上,这意味着它需要 NumPy 才能运行。
为什么要使用 Pandas?
数据科学家利用 Pandas Python 具有以下优点:
- 轻松处理缺失数据
- 它用 一维数据结构系列 和 DataFrame 用于多维数据结构
- 它提供了一种有效的数据切片方法
- 它提供了一种灵活的方式来合并、连接或重塑数据
- 它包括一个强大的时间序列工具
简而言之,Pandas 是一个有用的库, 数据分析。它可用于执行数据操作和分析。Pandas 提供了强大且易于使用的数据结构,以及快速对这些结构执行操作的方法。
如何安装 Pandas?
现在在这个 Python Pandas 教程,我们将学习如何安装 Pandas Python.
要安装 Pandas 库,请参阅我们的教程 如何安装 TensorFlow。默认情况下会安装 Pandas。在远程情况下,不会安装 Pandas-
您可以使用以下方式安装 Pandas:
- 水蟒: conda install -c 水蟒熊猫
- In Jupyter 笔记本 :
import sys !conda install --yes --prefix {sys.prefix} pandas
什么是 Pandas 数据框?
熊猫数据框 是一个二维数组,带有标记的数据结构,具有不同的列类型。DataFrame 是一种以表格格式存储数据的标准方式,其中行用于存储信息,列用于命名信息。例如,价格可以是列的名称,2,3,4、XNUMX、XNUMX 可以是价格值。
数据框为统计学家和其他数据从业人员所熟知。
下面是 Pandas 数据框的图片:
什么是系列?
系列是一维数据结构。它可以具有任何数据结构,例如整数、浮点数和字符串。当您想要执行计算或返回一维数组时,它很有用。根据定义,系列不能有多列。对于后一种情况,请使用数据框结构。
Python Pandas 系列具有以下参数:
- 数据:可以是列表、字典或标量值
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 系列,其中第三行有缺失值。请注意, Python 标记为“NaN”。您可以使用 numpy 人为创建缺失值:np.nan
pd.Series([1,2,np.nan])
输出
0 1.0 1 2.0 2 NaN dtype: float64
创建 Pandas DataFrame
现在,在本 Pandas DataFrame 教程中,我们将学习如何创建 Python Pandas 数据框:
您可以使用 pd.Data frame() 将 numpy 数组转换为 pandas 数据框。相反的操作也是可能的。要将 pandas 数据框转换为数组,可以使用 np.array()
## 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]]
您还可以使用字典来创建 Pandas 数据框。
dic = {'Name': ["John", "Smith"], 'Age': [30, 40]} pd.DataFrame(data=dic)
年龄 | 姓名 | |
---|---|---|
0 | 30 | John |
1 | 40 | SMITH |
熊猫范围数据
Pandas 有一个方便的 API 来创建日期范围。让我们来学习一下 Python Pandas 示例:
pd.data_range(日期,周期,频率):
- 第一个参数是开始日期
- 第二个参数是周期数(如果指定了结束日期,则可选)
- 最后一个参数是频率:日:“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')
检查数据
您可以使用 head() 或 tail() 检查数据集的头部或尾部,并在其前面加上熊猫数据框的名称,如下面的 Pandas 示例所示:
步骤1) 使用以下方式创建随机序列 麻木. 该序列有 4 列和 6 行
random = np.random.randn(6,4)
步骤2) 然后使用 pandas 创建一个数据框。
使用 dates_m 作为数据框的索引。这意味着每行将被赋予一个与日期相对应的“名称”或索引。
最后,使用参数 columns 为这 4 列命名
# Create data with date df = pd.DataFrame(random, index=dates_m, columns=list('ABCD'))
步骤3) 使用 head 函数
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)使用 tail 函数
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 |
切片数据
最后一点 Python Pandas 教程是关于如何切分 Pandas 数据框。
您可以使用列名来提取特定列中的数据,如下面的 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 |
在 Pandas 中,还有另一种方法可以选择多行和多列。您可以使用 iloc[]。此方法使用索引而不是列名。下面的代码返回与上面相同的数据框
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 |
删除列
您可以使用 pd.drop() 删除列
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 |
级联
您可以在 Pandas 中连接两个 DataFrame。您可以使用 pd.concat()
首先,你需要创建两个 DataFrame。到目前为止,你已经熟悉了 DataFrame 的创建
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])
最后,连接两个 DataFrame
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 对值进行排序
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 进行数据科学最有用的方法的总结
汇入资料 | 读取_csv |
---|---|
创建系列 | 系列 |
创建数据框 | 数据框 |
创建日期范围 | 日期范围 |
返回头 | 头 |
返回尾部 | 尾巴 |
描述 | 描述 |
使用名称进行切片 | 数据名称['列名'] |
使用行进行切片 | 数据名称[0:5] |