- Pandas环境安装配置
- Pandas数据结构
- Pandas快速入门
- Pandas系列
- Pandas数据帧(DataFrame)
- Pandas面板(Panel)
- Pandas基本功能
- Pandas描述性统计
- Pandas函数应用
- Pandas重建索引
- Pandas迭代
- Pandas排序
- Pandas字符串和文本数据
- Pandas选项和自定义
- Pandas索引和选择数据
- Pandas统计函数
- Pandas窗口函数
- Pandas聚合
- Pandas缺失数据
- Pandas分组(GroupBy)
- Pandas合并/连接
- Pandas级联
- Pandas日期功能
- Pandas时间差(Timedelta)
- Pandas分类数据
- Pandas可视化
- Pandas IO工具
- Pandas稀疏数据
- Pandas注意事项&窍门
- Pandas与SQL比较
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 -
{'inner', 'outer'}
,默认inner
。如何处理其他轴上的索引。联合的外部和交叉的内部。 - ignore_index − 布尔值,默认为
False
。如果指定为True
,则不要使用连接轴上的索引值。结果轴将被标记为:0,...,n-1
。 - join_axes - 这是Index对象的列表。用于其他
(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]) rs = pd.concat([one,two]) print(rs)
执行上面示例代码,得到以下结果 -
Marks_scored Name subject_id Alex sub1 Amy sub2 Allen sub4 Alice sub6 Ayoung sub5 Billy sub2 Brian sub4 Bran sub3 Bryce sub6 Betty sub5
假设想把特定的键与每个碎片的DataFrame关联起来。可以通过使用键参数来实现这一点 -
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]) rs = pd.concat([one,two],keys=['x','y']) print(rs)
执行上面示例代码,得到以下结果 -
Marks_scored Name subject_id x 1 98 Alex sub1 Amy sub2 Allen sub4 Alice sub6 Ayoung sub5 y 1 89 Billy sub2 Brian sub4 Bran sub3 Bryce sub6 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]) rs = pd.concat([one,two],keys=['x','y'],ignore_index=True) print(rs)
执行上面示例代码,得到以下结果 -
Marks_scored Name subject_id Alex sub1 Amy sub2 Allen sub4 Alice sub6 Ayoung sub5 Billy sub2 Brian sub4 Bran sub3 Bryce sub6 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]) rs = pd.concat([one,two],axis=1) print(rs)
执行上面示例代码,得到以下结果 -
Marks_scored Name subject_id Marks_scored Name subject_id Alex sub1 89 Billy sub2 Amy sub2 80 Brian sub4 Allen sub4 79 Bran sub3 Alice sub6 97 Bryce sub6 Ayoung sub5 88 Betty sub5
使用附加连接
连接的一个有用的快捷方式是在Series和DataFrame实例的append
方法。这些方法实际上早于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]) rs = one.append(two) print(rs)
执行上面示例代码,得到以下结果 -
Marks_scored Name subject_id Alex sub1 Amy sub2 Allen sub4 Alice sub6 Ayoung sub5 Billy sub2 Brian sub4 Bran sub3 Bryce sub6 Betty sub5
append()
函数也可以带多个对象 -
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]) rs = one.append([two,one,two]) print(rs)
执行上面示例代码,得到以下结果 -
Marks_scored Name subject_id Alex sub1 Amy sub2 Allen sub4 Alice sub6 Ayoung sub5 Billy sub2 Brian sub4 Bran sub3 Bryce sub6 Betty sub5 Alex sub1 Amy sub2 Allen sub4 Alice sub6 Ayoung sub5 Billy sub2 Brian sub4 Bran sub3 Bryce sub6 Betty sub5
时间序列
Pandas为时间序列数据的工作时间提供了一个强大的工具,尤其是在金融领域。在处理时间序列数据时,我们经常遇到以下情况 -
- 生成时间序列
- 将时间序列转换为不同的频率
Pandas提供了一个相对紧凑和自包含的工具来执行上述任务。
获取当前时间
datetime.now()
用于获取当前的日期和时间。
import pandas as pd print pd.datetime.now()
上述代码执行结果如下 -
2017-11-03 02:17:45.997992
创建一个时间戳
时间戳数据是时间序列数据的最基本类型,它将数值与时间点相关联。 对于Pandas对象来说,意味着使用时间点。举个例子 -
import pandas as pd time = pd.Timestamp('2018-11-01') print(time)
执行上面示例代码,得到以下结果 -
2018-11-01 00:00:00
也可以转换整数或浮动时期。这些的默认单位是纳秒(因为这些是如何存储时间戳的)。 然而,时代往往存储在另一个可以指定的单元中。 再举一个例子 -
import pandas as pd time = pd.Timestamp(1588686880,unit='s') print(time)
执行上面示例代码,得到以下结果 -
2020-05-05 13:54:40
创建一个时间范围
import pandas as pd time = pd.date_range("12:00", "23:59", freq="30min").time print(time)
执行上面示例代码,得到以下结果 -
[datetime.time(12, 0) datetime.time(12, 30) datetime.time(13, 0) datetime.time(13, 30) datetime.time(14, 0) datetime.time(14, 30) datetime.time(15, 0) datetime.time(15, 30) datetime.time(16, 0) datetime.time(16, 30) datetime.time(17, 0) datetime.time(17, 30) datetime.time(18, 0) datetime.time(18, 30) datetime.time(19, 0) datetime.time(19, 30) datetime.time(20, 0) datetime.time(20, 30) datetime.time(21, 0) datetime.time(21, 30) datetime.time(22, 0) datetime.time(22, 30) datetime.time(23, 0) datetime.time(23, 30)]
改变时间的频率
import pandas as pd time = pd.date_range("12:00", "23:59", freq="H").time print(time)
执行上面示例代码,得到以下结果 -
[datetime.time(12, 0) datetime.time(13, 0) datetime.time(14, 0) datetime.time(15, 0) datetime.time(16, 0) datetime.time(17, 0) datetime.time(18, 0) datetime.time(19, 0) datetime.time(20, 0) datetime.time(21, 0) datetime.time(22, 0) datetime.time(23, 0)]
转换为时间戳
要转换类似日期的对象(例如字符串,时代或混合)的序列或类似列表的对象,可以使用to_datetime
函数。当传递时将返回一个Series(具有相同的索引),而类似列表被转换为DatetimeIndex
。 看看下面的例子 -
import pandas as pd time = pd.to_datetime(pd.Series(['Jul 31, 2009','2019-10-10', None])) print(time)
执行上面示例代码,得到以下结果 -
0 2009-07-31 2019-10-10 NaT dtype: datetime64[ns]
NaT
表示不是一个时间的值(相当于NaN
)
举一个例子,
import pandas as pd import pandas as pd time = pd.to_datetime(['2009/11/23', '2019.12.31', None]) print(time)
执行上面示例代码,得到以下结果 -
DatetimeIndex(['2009-11-23', '2019-12-31', 'NaT'], dtype='datetime64[ns]', freq=None)
上一篇:Pandas合并/连接
下一篇:Pandas日期功能
扫描二维码
程序员编程王