Pandas提供了各種工具(功能),可以輕鬆地將Series
,DataFrame
和Panel
物件組合在一起。
pd.concat(objs,axis=0,join='outer',join_axes=None,
ignore_index=False)
其中,
{0,1,...}
,預設為0
,這是連線的軸。{'inner', 'outer'}
,預設inner
。如何處理其他軸上的索引。聯合的外部和交叉的內部。False
。如果指定為True
,則不要使用連線軸上的索引值。結果軸將被標記為:0,...,n-1
。(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
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關聯起來。可以通過使用鍵引數來實現這一點 -
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
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])
rs = pd.concat([one,two],keys=['x','y'],ignore_index=True)
print(rs)
執行上面範例程式碼,得到以下結果 -
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])
rs = pd.concat([one,two],axis=1)
print(rs)
執行上面範例程式碼,得到以下結果 -
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
連線的一個有用的快捷方式是在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
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])
rs = one.append([two,one,two])
print(rs)
執行上面範例程式碼,得到以下結果 -
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-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
1 2019-10-10
2 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)