Python Pandas 连接join

Python Pandas 连接join

Pandas提供了各种方法来轻松地组合 Series, DataFramePanel 对象。

pd.concat(objs,axis=0,join='outer',join_axes=None,
ignore_index=False)
  • objs − 这是一系列或映射的Series、DataFrame或Panel对象。

  • axis − {0, 1, …},默认为0。这是要沿着连接的轴。

  • join − {‘inner’, ‘outer’},默认为‘outer’。如何处理其他轴上的索引。对于并集使用Outer,对于交集使用Inner。

  • 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

使用append进行拼接

在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])
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

在HTML中, 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])
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 函数。传递参数后,将返回一个具有相同索引的系列对象,而 类似列表 将被转换为一个 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 表示 不是一个时间 (和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)

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程