1、Pandas 串聯
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’},默認為’outer’。如何處理其他軸上的索引。外部為聯合,內部為交叉。
ignore_index ? 布爾值,默認為False。如果為True,則不要在串聯軸上使用索引值。結果軸將標記為0,…,n-1。
join_axes ? 這是索引對象的列表。用于其他(n-1)軸的特定索引,而不是執行內部/外部設置邏輯。
1.1、連接對象
該CONCAT函數執行所有沿軸線進行聯接操作的重任。讓我們創建不同的對象并進行串聯。
import pandas as pdone = 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 pdone = 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 sub12 90 Amy sub23 87 Allen sub44 69 Alice sub65 78 Ayoung sub5
y 1 89 Billy sub22 80 Brian sub43 79 Bran sub34 97 Bryce sub65 88 Betty sub5
結果的索引是重復的;每個索引重復。
如果結果對象必須遵循其自己的索引,則將ignore_index設置為True。
import pandas as pdone = 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 pdone = 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
1.2、使用append串聯
Concat有用的快捷方式是Series和DataFrame上的append實例方法。這些方法實際上早于concat。它們沿著軸= 0連接,即索引-
import pandas as pdone = 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 pdone = 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
1.3、時間序列
Pandas 提供了一個強大的工具來處理時間序列數據,特別是在金融領域。在處理時間序列數據時,我們經常遇到以下情況:
產生時間順序
將時間序列轉換為不同的頻率
提供了一套相對緊湊且獨立的工具來執行上述任務。
獲取當前時間
datetime.now()為您提供當前日期和時間。
import pandas as pdprint(pd.datetime.now())
運行結果
2017-05-11 06:10:13.393147
1.4、創建一個時間戳
時間戳數據是將值與時間點相關聯的時間序列數據的最基本類型。對于熊貓對象,這意味著使用時間點。讓我們舉個實例-
import pandas as pd
print(pd.Timestamp('2024-06-06'))
運行結果
2024-06-06 00:00:00
也可以轉換整數或浮點時間。這些的默認單位是納秒(因為這是時間戳的存儲方式)。但是,通常將紀元存儲在可以指定的另一個單元中。再舉一個實例
import pandas as pd
print(pd.Timestamp(1587687255,unit='s'))
運行結果
2020-04-24 00:14:15
1.5、創建時間范圍
示例
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)]
1.6、更改時間頻率
示例
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)]
1.7、轉換為時間戳
若要將類似日期的對象的系列或類似列表的對象(例如字符串,歷元或混合)轉換,可以使用to_datetime函數。傳遞時,將返回一個Series(具有相同的索引),而類似列表的列表將轉換為DatetimeIndex。看下面的實例-
示例
import pandas as pd
print(pd.to_datetime(pd.Series(['Jul 31, 2009','2010-01-10', None])))
運行結果如下:
0 2009-07-311 2010-01-102 NaTdtype: 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)