- Python pandas教程
- Python Pandas - 主页
- Python Pandas - 简介
- Python Pandas - 环境设置
- 数据结构简介
- Python pandas - 系列
- Python Pandas - 数据帧
- Python Pandas - 面板
- Python Pandas - 基本功能
- 描述性统计
- 功能应用
- Python Pandas - 重新索引
- Python Pandas - 迭代
- Python Pandas - 排序
- 处理文本数据
- 选项和定制
- 索引和选择数据
- 统计功能
- Python Pandas - 窗口函数
- Python Pandas - 聚合
- Python Pandas - 缺失数据
- Python Pandas - GroupBy
- Python Pandas - 合并/连接
- Python Pandas - 连接
- Python Pandas - 日期功能
- Python Pandas - Timedelta
- Python Pandas - 分类数据
- Python Pandas - 可视化
- Python Pandas - IO 工具
- Python Pandas - 稀疏数据
- Python Pandas - 注意事项和陷阱
- 与SQL的比较
- Python Pandas 有用资源
- Python Pandas - 快速指南
- Python Pandas - 有用的资源
- Python Pandas - 讨论
Python Pandas - 连接
Pandas 提供了各种工具来轻松地将Series、DataFrame和Panel对象组合在一起。
pd.concat(objs,axis=0,join='outer',join_axes=None, ignore_index=False)
objs - 这是 Series、DataFrame 或 Panel 对象的序列或映射。
axis - {0, 1, ...},默认 0。这是要连接的轴。
join - {'内部','外部'},默认'外部'。如何处理其他轴上的索引。外部用于并集,内部用于交集。
ignore_index - 布尔值,默认 False。如果为 True,则不使用串联轴上的索引值。生成的轴将标记为 0, ..., n - 1。
join_axes - 这是索引对象的列表。用于其他 (n-1) 轴的特定索引,而不是执行内部/外部设置逻辑。
连接对象
concat函数完成沿轴执行串联操作的所有繁重工作。让我们创建不同的对象并进行串联。
import pandas as pd one = pd.DataFrame({ 'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'subject_id':['sub1','sub2','sub4','sub6','sub5'], 'Marks_scored':[98,90,87,69,78]}, index=[1,2,3,4,5]) two = pd.DataFrame({ 'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 'subject_id':['sub2','sub4','sub3','sub6','sub5'], 'Marks_scored':[89,80,79,97,88]}, index=[1,2,3,4,5]) print pd.concat([one,two])
其输出如下 -
Marks_scored Name subject_id 1 98 Alex sub1 2 90 Amy sub2 3 87 Allen sub4 4 69 Alice sub6 5 78 Ayoung sub5 1 89 Billy sub2 2 80 Brian sub4 3 79 Bran sub3 4 97 Bryce sub6 5 88 Betty sub5
假设我们想要将特定的键与切碎的 DataFrame 的每个部分相关联。我们可以通过使用keys参数来做到这一点 -
import pandas as pd one = pd.DataFrame({ 'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'subject_id':['sub1','sub2','sub4','sub6','sub5'], 'Marks_scored':[98,90,87,69,78]}, index=[1,2,3,4,5]) two = pd.DataFrame({ 'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 'subject_id':['sub2','sub4','sub3','sub6','sub5'], 'Marks_scored':[89,80,79,97,88]}, index=[1,2,3,4,5]) print pd.concat([one,two],keys=['x','y'])
其输出如下 -
x 1 98 Alex sub1 2 90 Amy sub2 3 87 Allen sub4 4 69 Alice sub6 5 78 Ayoung sub5 y 1 89 Billy sub2 2 80 Brian sub4 3 79 Bran sub3 4 97 Bryce sub6 5 88 Betty sub5
结果的索引重复;每个索引都是重复的。
如果生成的对象必须遵循其自己的索引,请将ignore_index设置为True。
import pandas as pd one = pd.DataFrame({ 'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'subject_id':['sub1','sub2','sub4','sub6','sub5'], 'Marks_scored':[98,90,87,69,78]}, index=[1,2,3,4,5]) two = pd.DataFrame({ 'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 'subject_id':['sub2','sub4','sub3','sub6','sub5'], 'Marks_scored':[89,80,79,97,88]}, index=[1,2,3,4,5]) print pd.concat([one,two],keys=['x','y'],ignore_index=True)
其输出如下 -
Marks_scored Name subject_id 0 98 Alex sub1 1 90 Amy sub2 2 87 Allen sub4 3 69 Alice sub6 4 78 Ayoung sub5 5 89 Billy sub2 6 80 Brian sub4 7 79 Bran sub3 8 97 Bryce sub6 9 88 Betty sub5
观察一下,索引完全改变了,并且键也被覆盖了。
如果需要沿axis=1添加两个对象,则将附加新列。
import pandas as pd one = pd.DataFrame({ 'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'subject_id':['sub1','sub2','sub4','sub6','sub5'], 'Marks_scored':[98,90,87,69,78]}, index=[1,2,3,4,5]) two = pd.DataFrame({ 'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 'subject_id':['sub2','sub4','sub3','sub6','sub5'], 'Marks_scored':[89,80,79,97,88]}, index=[1,2,3,4,5]) print pd.concat([one,two],axis=1)
其输出如下 -
Marks_scored Name subject_id Marks_scored Name subject_id 1 98 Alex sub1 89 Billy sub2 2 90 Amy sub2 80 Brian sub4 3 87 Allen sub4 79 Bran sub3 4 69 Alice sub6 97 Bryce sub6 5 78 Ayoung sub5 88 Betty sub5
使用追加连接
concat 的一个有用的快捷方式是 Series 和 DataFrame 上的追加实例方法。这些方法实际上早于 concat。它们沿着axis=0连接,即索引 -
import pandas as pd one = pd.DataFrame({ 'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'subject_id':['sub1','sub2','sub4','sub6','sub5'], 'Marks_scored':[98,90,87,69,78]}, index=[1,2,3,4,5]) two = pd.DataFrame({ 'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 'subject_id':['sub2','sub4','sub3','sub6','sub5'], 'Marks_scored':[89,80,79,97,88]}, index=[1,2,3,4,5]) print one.append(two)
其输出如下 -
Marks_scored Name subject_id 1 98 Alex sub1 2 90 Amy sub2 3 87 Allen sub4 4 69 Alice sub6 5 78 Ayoung sub5 1 89 Billy sub2 2 80 Brian sub4 3 79 Bran sub3 4 97 Bryce sub6 5 88 Betty sub5
追加函数也可以接受多个对象 -
import pandas as pd one = pd.DataFrame({ 'Name': ['Alex', 'Amy', 'Allen', 'Alice', 'Ayoung'], 'subject_id':['sub1','sub2','sub4','sub6','sub5'], 'Marks_scored':[98,90,87,69,78]}, index=[1,2,3,4,5]) two = pd.DataFrame({ 'Name': ['Billy', 'Brian', 'Bran', 'Bryce', 'Betty'], 'subject_id':['sub2','sub4','sub3','sub6','sub5'], 'Marks_scored':[89,80,79,97,88]}, index=[1,2,3,4,5]) print one.append([two,one,two])
其输出如下 -
Marks_scored Name subject_id 1 98 Alex sub1 2 90 Amy sub2 3 87 Allen sub4 4 69 Alice sub6 5 78 Ayoung sub5 1 89 Billy sub2 2 80 Brian sub4 3 79 Bran sub3 4 97 Bryce sub6 5 88 Betty sub5 1 98 Alex sub1 2 90 Amy sub2 3 87 Allen sub4 4 69 Alice sub6 5 78 Ayoung sub5 1 89 Billy sub2 2 80 Brian sub4 3 79 Bran sub3 4 97 Bryce sub6 5 88 Betty sub5
时间序列
Pandas 为处理时间序列数据提供了强大的工具,尤其是在金融领域。在处理时间序列数据时,我们经常遇到以下情况 -
- 生成时间序列
- 将时间序列转换为不同频率
Pandas 提供了一套相对紧凑且独立的工具来执行上述任务。
获取当前时间
datetime.now()为您提供当前日期和时间。
import pandas as pd print pd.datetime.now()
其输出如下 -
2017-05-11 06:10:13.393147
创建时间戳
带时间戳的数据是将值与时间点关联起来的最基本的时间序列数据类型。对于 pandas 对象,这意味着使用时间点。让我们举个例子 -
import pandas as pd print pd.Timestamp('2017-03-01')
其输出如下 -
2017-03-01 00:00:00
还可以转换整数或浮点纪元时间。这些的默认单位是纳秒(因为这是时间戳的存储方式)。然而,纪元通常存储在可以指定的另一个单位中。我们再举一个例子
import pandas as pd print pd.Timestamp(1587687255,unit='s')
其输出如下 -
2020-04-24 00:14:15
创建时间范围
import pandas as pd print pd.date_range("11:00", "13:30", freq="30min").time
其输出如下 -
[datetime.time(11, 0) datetime.time(11, 30) datetime.time(12, 0) datetime.time(12, 30) datetime.time(13, 0) datetime.time(13, 30)]
改变时间频率
import pandas as pd print pd.date_range("11:00", "13:30", freq="H").time
其输出如下 -
[datetime.time(11, 0) datetime.time(12, 0) datetime.time(13, 0)]
转换为时间戳
要将系列或类似列表的对象转换为类似日期的对象(例如字符串、纪元或混合),您可以使用to_datetime函数。传递后,这将返回一个 Series (具有相同的索引),而类似列表将转换为DatetimeIndex。看一下下面的例子 -
import pandas as pd print pd.to_datetime(pd.Series(['Jul 31, 2009','2010-01-10', None]))
其输出如下 -
0 2009-07-31 1 2010-01-10 2 NaT dtype: datetime64[ns]
NaT表示Not a Time(相当于 NaN)
我们再举一个例子。
import pandas as pd print pd.to_datetime(['2005/11/23', '2010.12.31', None])
其输出如下 -
DatetimeIndex(['2005-11-23', '2010-12-31', 'NaT'], dtype='datetime64[ns]', freq=None)