Python Pandas - konkatenacja
Pandy zapewniają różne udogodnienia do łatwego łączenia Series, DataFrame, i Panel obiekty.
pd.concat(objs,axis=0,join='outer',join_axes=None,
ignore_index=False)
objs - To jest sekwencja lub mapowanie obiektów Series, DataFrame lub Panel.
axis - {0, 1, ...}, domyślnie 0. To jest oś do połączenia.
join- {'wewnętrzny', 'zewnętrzny'}, domyślny 'zewnętrzny'. Jak obsługiwać indeksy na innych osiach. Zewnętrzna do połączenia i wewnętrzna do przecięcia.
ignore_index- boolean, domyślnie False. Jeśli True, nie używaj wartości indeksu na osi konkatenacji. Wynikowa oś zostanie oznaczona jako 0, ..., n - 1.
join_axes- To jest lista obiektów indeksu. Określone indeksy do użycia dla innych (n-1) osi zamiast wykonywania logiki zbioru wewnętrznego / zewnętrznego.
Łączenie obiektów
Plik concatfunkcja wykonuje wszystkie ciężkie czynności związane z wykonywaniem operacji konkatenacji wzdłuż osi. Stwórzmy różne obiekty i zróbmy konkatenację.
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])
Jego output wygląda następująco -
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
Załóżmy, że chcieliśmy powiązać określone klucze z każdym fragmentem pociętej ramki DataFrame. Możemy to zrobić za pomocąkeys argument -
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'])
Jego output wygląda następująco -
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
Indeks wyniku jest zduplikowany; każdy indeks jest powtarzany.
Jeśli wynikowy obiekt ma podlegać własnemu indeksowaniu, ustaw ignore_index do 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)
Jego output wygląda następująco -
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
Zauważ, że indeks zmienia się całkowicie, a klucze również są nadpisywane.
Jeśli trzeba dodać dwa obiekty axis=1, to nowe kolumny zostaną dołączone.
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)
Jego output wygląda następująco -
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
Łączenie przy użyciu append
Przydatnym skrótem do konkatacji są metody dołączania instancji w Series i DataFrame. Te metody faktycznie poprzedzały concat. Łączą się razemaxis=0czyli indeks -
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)
Jego output wygląda następująco -
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
Plik append funkcja może również przyjmować wiele obiektów -
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])
Jego output wygląda następująco -
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
Szereg czasowy
Pandy zapewniają solidne narzędzie do czasu pracy z danymi szeregów czasowych, szczególnie w sektorze finansowym. Podczas pracy z danymi szeregów czasowych często napotykamy:
- Generowanie sekwencji czasu
- Konwertuj szeregi czasowe na różne częstotliwości
Pandy zapewnia stosunkowo kompaktowy i samodzielny zestaw narzędzi do wykonywania powyższych zadań.
Pobierz aktualny czas
datetime.now() podaje aktualną datę i godzinę.
import pandas as pd
print pd.datetime.now()
Jego output wygląda następująco -
2017-05-11 06:10:13.393147
Utwórz znacznik czasu
Dane ze znacznikiem czasu to najbardziej podstawowy typ danych z serii czasowej, który kojarzy wartości z punktami w czasie. W przypadku obiektów pandy oznacza to wykorzystanie punktów w czasie. Weźmy przykład -
import pandas as pd
print pd.Timestamp('2017-03-01')
Jego output wygląda następująco -
2017-03-01 00:00:00
Możliwa jest również konwersja liczb całkowitych lub zmiennoprzecinkowych. Domyślną jednostką dla tego są nanosekundy (ponieważ w ten sposób są przechowywane znaczniki czasu). Jednak często epoki są przechowywane w innej jednostce, którą można określić. Weźmy inny przykład
import pandas as pd
print pd.Timestamp(1587687255,unit='s')
Jego output wygląda następująco -
2020-04-24 00:14:15
Utwórz zakres czasu
import pandas as pd
print pd.date_range("11:00", "13:30", freq="30min").time
Jego output wygląda następująco -
[datetime.time(11, 0) datetime.time(11, 30) datetime.time(12, 0)
datetime.time(12, 30) datetime.time(13, 0) datetime.time(13, 30)]
Zmień częstotliwość czasu
import pandas as pd
print pd.date_range("11:00", "13:30", freq="H").time
Jego output wygląda następująco -
[datetime.time(11, 0) datetime.time(12, 0) datetime.time(13, 0)]
Konwertowanie na znaczniki czasu
Aby przekonwertować serię lub obiekt typu listy obiektów typu daty, na przykład ciągów znaków, epok lub ich mieszanki, możesz użyć to_datetimefunkcjonować. Po przekazaniu zwraca Series (z tym samym indeksem), podczas gdy alist-like jest konwertowany na DatetimeIndex. Spójrz na następujący przykład -
import pandas as pd
print pd.to_datetime(pd.Series(['Jul 31, 2009','2010-01-10', None]))
Jego output wygląda następująco -
0 2009-07-31
1 2010-01-10
2 NaT
dtype: datetime64[ns]
NaT znaczy Not a Time (odpowiednik NaN)
Weźmy inny przykład.
import pandas as pd
print pd.to_datetime(['2005/11/23', '2010.12.31', None])
Jego output wygląda następująco -
DatetimeIndex(['2005-11-23', '2010-12-31', 'NaT'], dtype='datetime64[ns]', freq=None)