Concatenation
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'},默认'outer'。 如何处理其他轴上的索引。 结合的外部和交叉的内部。
ignore_index - 布尔值,默认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])
其output如下 -
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'])
其output如下 -
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)
其output如下 -
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)
其output如下 -
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)
其output如下 -
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
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])
其output如下 -
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为Time系列数据提供了一个强大的工作时间工具,特别是在金融领域。 在处理时间序列数据时,我们经常遇到以下情况 -
- 生成时间序列
- 将时间序列转换为不同的频率
Pandas提供了一套相对紧凑且独立的工具,用于执行上述任务。
获取当前时间
datetime.now()为您提供当前日期和时间。
import pandas as pd
print pd.datetime.now()
其output如下 -
2017-05-11 06:10:13.393147
创建一个TimeStamp
带时间戳的数据是最基本的时间序列数据类型,它将值与时间点相关联。 对于pandas对象,它意味着使用时间点。 我们来举个例子 -
import pandas as pd
print pd.Timestamp('2017-03-01')
其output如下 -
2017-03-01 00:00:00
也可以转换整数或浮点纪元时间。 这些的默认单位是纳秒(因为这些是存储时间戳的方式)。 然而,通常时期存储在可以指定的另一个单元中。 让我们再看一个例子
import pandas as pd
print pd.Timestamp(1587687255,unit='s')
其output如下 -
2020-04-24 00:14:15
创建一个时间范围
import pandas as pd
print pd.date_range("11:00", "13:30", freq="30min").time
其output如下 -
[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
其output如下 -
[datetime.time(11, 0) datetime.time(12, 0) datetime.time(13, 0)]
转换为时间戳
要转换类似日期的对象的系列或类似列表的对象,例如字符串,纪元或混合,您可以使用to_datetime函数。 传递时,返回一个Series(具有相同的索引),而类似list-like则转换为DatetimeIndex 。 看看下面的例子 -
import pandas as pd
print pd.to_datetime(pd.Series(['Jul 31, 2009','2010-01-10', None]))
其output如下 -
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])
其output如下 -
DatetimeIndex(['2005-11-23', '2010-12-31', 'NaT'], dtype='datetime64[ns]', freq=None)