pandas提供各種工具以簡便合併序列,數據楨,和組合對象, 在連接/合併類型操作中使用多種類型索引和相關數學函數.
請參閱合併部分
把pandas對象連接到一起
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
In
[
73
]
:
df
=
pd
.
DataFrame
(
np
.
random
.
randn
(
10
,
4
)
)
In
[
74
]
:
df
Out
[
74
]
:
0
1
2
3
0
-
0.548702
1.467327
-
1.015962
-
0.483075
1
1.637550
-
1.217659
-
0.291519
-
1.745505
2
-
0.263952
0.991460
-
0.919069
0.266046
3
-
0.709661
1.669052
1.037882
-
1.705775
4
-
0.919854
-
0.042379
1.247642
-
0.009920
5
0.290213
0.495767
0.362949
1.548106
6
-
1.131345
-
0.089329
0.337863
-
0.945867
7
-
0.932132
1.956030
0.017587
-
0.016692
8
-
0.575247
0.254161
-
1.143704
0.215897
9
1.193555
-
0.077118
-
0.408530
-
0.862495
# break it into pieces
In
[
75
]
:
pieces
=
[
df
[
:
3
]
,
df
[
3
:
7
]
,
df
[
7
:
]
]
In
[
76
]
:
pd
.
concat
(
pieces
)
Out
[
76
]
:
0
1
2
3
0
-
0.548702
1.467327
-
1.015962
-
0.483075
1
1.637550
-
1.217659
-
0.291519
-
1.745505
2
-
0.263952
0.991460
-
0.919069
0.266046
3
-
0.709661
1.669052
1.037882
-
1.705775
4
-
0.919854
-
0.042379
1.247642
-
0.009920
5
0.290213
0.495767
0.362949
1.548106
6
-
1.131345
-
0.089329
0.337863
-
0.945867
7
-
0.932132
1.956030
0.017587
-
0.016692
8
-
0.575247
0.254161
-
1.143704
0.215897
9
1.193555
-
0.077118
-
0.408530
-
0.862495
|
SQL樣式合併. 請參閱 數據庫style聯接
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
In
[
77
]
:
left
=
pd
.
DataFrame
(
{
'key'
:
[
'foo'
,
'foo'
]
,
'lval'
:
[
1
,
2
]
}
)
In
[
78
]
:
right
=
pd
.
DataFrame
(
{
'key'
:
[
'foo'
,
'foo'
]
,
'rval'
:
[
4
,
5
]
}
)
In
[
79
]
:
left
Out
[
79
]
:
key
lval
0
foo
1
1
foo
2
In
[
80
]
:
right
Out
[
80
]
:
key
rval
0
foo
4
1
foo
5
In
[
81
]
:
pd
.
merge
(
left
,
right
,
on
=
'key'
)
Out
[
81
]
:
key
lval
rval
0
foo
1
4
1
foo
1
5
2
foo
2
4
3
foo
2
5
|
添加行到數據增. 參閱 添加
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
In
[
82
]
:
df
=
pd
.
DataFrame
(
np
.
random
.
randn
(
8
,
4
)
,
columns
=
[
'A'
,
'B'
,
'C'
,
'D'
]
)
In
[
83
]
:
df
Out
[
83
]
:
A
B
C
D
0
1.346061
1.511763
1.627081
-
0.990582
1
-
0.441652
1.211526
0.268520
0.024580
2
-
1.577585
0.396823
-
0.105381
-
0.532532
3
1.453749
1.208843
-
0.080952
-
0.264610
4
-
0.727965
-
0.589346
0.339969
-
0.693205
5
-
0.339355
0.593616
0.884345
1.591431
6
0.141809
0.220390
0.435589
0.192451
7
-
0.096701
0.803351
1.715071
-
0.708758
In
[
84
]
:
s
=
df
.
iloc
[
3
]
In
[
85
]
:
df
.
append
(
s
,
ignore_index
=
True
)
Out
[
85
]
:
A
B
C
D
0
1.346061
1.511763
1.627081
-
0.990582
1
-
0.441652
1.211526
0.268520
0.024580
2
-
1.577585
0.396823
-
0.105381
-
0.532532
3
1.453749
1.208843
-
0.080952
-
0.264610
4
-
0.727965
-
0.589346
0.339969
-
0.693205
5
-
0.339355
0.593616
0.884345
1.591431
6
0.141809
0.220390
0.435589
0.192451
7
-
0.096701
0.803351
1.715071
-
0.708758
8
1.453749
1.208843
-
0.080952
-
0.264610
|
對於「group by」指的是以下一個或多個處理
請參閱 分組部分
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
|
In
[
86
]
:
df
=
pd
.
DataFrame
(
{
'A'
:
[
'foo'
,
'bar'
,
'foo'
,
'bar'
,
.
.
.
.
:
'foo'
,
'bar'
,
'foo'
,
'foo'
]
,
.
.
.
.
:
'B'
:
[
'one'
,
'one'
,
'two'
,
'three'
,
.
.
.
.
:
'two'
,
'two'
,
'one'
,
'three'
]
,
.
.
.
.
:
'C'
:
np
.
random
.
randn
(
8
)
,
.
.
.
.
:
'D'
:
np
.
random
.
randn
(
8
)
}
)
.
.
.
.
:
In
[
87
]
:
df
Out
[
87
]
:
A
B
C
D
0
foo
one
-
1.202872
-
0.055224
1
bar
one
-
1.814470
2.395985
2
foo
two
1.018601
1.552825
3
bar
three
-
0.595447
0.166599
4
foo
two
1.395433
0.047609
5
bar
two
-
0.392670
-
0.136473
6
foo
one
0.007207
-
0.561757
7
foo
three
1.928123
-
1.623033
|
分組然後應用函數統計總和存放到結果組
1
2
3
4
5
6
|
In
[
88
]
:
df
.
groupby
(
'A'
)
.
sum
(
)
Out
[
88
]
:
C
D
A
bar
-
2.802588
2.42611
foo
3.146492
-
0.63958
|
按多列分組爲層次索引,然後應用函數
1
2
3
4
5
6
7
8
9
10
|
In
[
89
]
:
df
.
groupby
(
[
'A'
,
'B'
]
)
.
sum
(
)
Out
[
89
]
:
C
D
A
B
bar
one
-
1.814470
2.395985
three
-
0.595447
0.166599
two
-
0.392670
-
0.136473
foo
one
-
1.195665
-
0.616981
three
1.928123
-
1.623033
two
2.414034
1.600434
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
In
[
90
]
:
tuples
=
list
(
zip
(
*
[
[
'bar'
,
'bar'
,
'baz'
,
'baz'
,
.
.
.
.
:
'foo'
,
'foo'
,
'qux'
,
'qux'
]
,
.
.
.
.
:
[
'one'
,
'two'
,
'one'
,
'two'
,
.
.
.
.
:
'one'
,
'two'
,
'one'
,
'two'
]
]
)
)
.
.
.
.
:
In
[
91
]
:
index
=
pd
.
MultiIndex
.
from_tuples
(
tuples
,
names
=
[
'first'
,
'second'
]
)
In
[
92
]
:
df
=
pd
.
DataFrame
(
np
.
random
.
randn
(
8
,
2
)
,
index
=
index
,
columns
=
[
'A'
,
'B'
]
)
In
[
93
]
:
df2
=
df
[
:
4
]
In
[
94
]
:
df2
Out
[
94
]
:
A
B
first
second
bar
one
0.029399
-
0.542108
two
0.282696
-
0.087302
baz
one
-
1.575170
1.771208
two
0.816482
1.100230
|
堆疊 函數 「壓縮」 數據楨的列一個級別.
1
2
3
4
5
6
7
8
9
10
11
12
13
|
In
[
95
]
:
stacked
=
df2
.
stack
(
)
In
[
96
]
:
stacked
Out
[
96
]
:
first
second
bar
one
A
0.029399
B
-
0.542108
two
A
0.282696
B
-
0.087302
baz
one
A
-
1.575170
B
1.771208
two
A
0.816482
B
1.100230
dtype
:
float64
|
被「堆疊」數據楨或序列(有多個索引作爲索引), 其堆疊的反向操作是未堆棧, 上面的數據默認反堆疊到上一級別:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
In
[
97
]
:
stacked
.
unstack
(
)
Out
[
97
]
:
A
B
first
second
bar
one
0.029399
-
0.542108
two
0.282696
-
0.087302
baz
one
-
1.575170
1.771208
two
0.816482
1.100230
In
[
98
]
:
stacked
.
unstack
(
1
)
Out
[
98
]
:
second
one
two
first
bar
A
0.029399
0.282696
B
-
0.542108
-
0.087302
baz
A
-
1.575170
0.816482
B
1.771208
1.100230
In
[
99
]
:
stacked
.
unstack
(
0
)
Out
[
99
]
:
first
bar
baz
second
one
A
0.029399
-
1.575170
B
-
0.542108
1.771208
two
A
0.282696
0.816482
B
-
0.087302
1.100230
|
查看數據透視表.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
In
[
100
]
:
df
=
pd
.
DataFrame
(
{
'A'
:
[
'one'
,
'one'
,
'two'
,
'three'
]
*
3
,
.
.
.
.
.
:
'B'
:
[
'A'
,
'B'
,
'C'
]
*
4
,
.
.
.
.
.
:
'C'
:
[
'foo'
,
'foo'
,
'foo'
,
'bar'
,
'bar'
,
'bar'
]
*
2
,
.
.
.
.
.
:
'D'
:
np
.
random
.
randn
(
12
)
,
.
.
.
.
.
:
'E'
:
np
.
random
.
randn
(
12
)
}
)
.
.
.
.
.
:
In
[
101
]
:
df
Out
[
101
]
:
A
B
C
D
E
0
one
A
foo
1.418757
-
0.179666
1
one
B
foo
-
1.879024
1.291836
2
two
C
foo
0.536826
-
0.009614
3
three
A
bar
1.006160
0.392149
4
one
B
bar
-
0.029716
0.264599
5
one
C
bar
-
1.146178
-
0.057409
6
two
A
foo
0.100900
-
1.425638
7
three
B
foo
-
1.035018
1.024098
8
one
C
foo
0.314665
-
0.106062
9
one
A
bar
-
0.773723
1.824375
10
two
B
bar
-
1.170653
0.595974
11
three
C
bar
0.648740
1.167115
|
我們可以從此數據非常容易的產生數據透視表:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
In
[
102
]
:
pd
.
pivot_table
(
df
,
values
=
'D'
,
index
=
[
'A'
,
'B'
]
,
columns
=
[
'C'
]
)
Out
[
102
]
:
C
bar
foo
A
B
one
A
-
0.773723
1.418757
B
-
0.029716
-
1.879024
C
-
1.146178
0.314665
three
A
1.006160
NaN
B
NaN
-
1.035018
C
0.648740
NaN
two
A
NaN
0.100900
B
-
1.170653
NaN
C
NaN
0.536826
|
pandas有易用,強大且高效的函數用於高頻數據重採樣轉換操作(例如,轉換秒數據到5分鐘數據), 這是很普遍的情況,但並不侷限於金融應用, 請參閱時間序列章節
1
2
3
4
5
6
|
In
[
103
]
:
rng
=
pd
.
date_range
(
'1/1/2012'
,
periods
=
100
,
freq
=
'S'
)
In
[
104
]
:
ts
=
pd
.
Series
(
np
.
random
.
randint
(
0
,
500
,
len
(
rng
)
)
,
index
=
rng
)
In
[
105
]
:
ts
.
resample
(
'5Min'
,
how
=
'sum'
)
Out
[
105
]
:
2012
-
01
-
01
25083
Freq
:
5T
,
dtype
:
int32
|
時區表示
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
In
[
106
]
:
rng
=
pd
.
date_range
(
'3/6/2012 00:00'
,
periods
=
5
,
freq
=
'D'
)
In
[
107
]
:
ts
=
pd
.
Series
(
np
.
random
.
randn
(
len
(
rng
)
)
,
rng
)
In
[
108
]
:
ts
Out
[
108
]
:
2012
-
03
-
06
0.464000
2012
-
03
-
07
0.227371
2012
-
03
-
08
-
0.496922
2012
-
03
-
09
0.306389
2012
-
03
-
10
-
2.290613
Freq
:
D
,
dtype
:
float64
In
[
109
]
:
ts_utc
=
ts
.
tz_localize
(
'UTC'
)
In
[
110
]
:
ts_utc
Out
[
110
]
:
2012
-
03
-
06
00
:
00
:
00
+
00
:
00
0.464000
2012
-
03
-
07
00
:
00
:
00
+
00
:
00
0.227371
2012
-
03
-
08
00
:
00
:
00
+
00
:
00
-
0.496922
2012
-
03
-
09
00
:
00
:
00
+
00
:
00
0.306389
2012
-
03
-
10
00
:
00
:
00
+
00
:
00
-
2.290613
Freq
:
D
,
dtype
:
float64
|
轉換到其它時區
1
2
3
4
5
6
7
8
|
In
[
111
]
:
ts_utc
.
tz_convert
(
'US/Eastern'
)
Out
[
111
]
:
2012
-
03
-
05
19
:
00
:
00
-
05
:
00
0.464000
2012
-
03
-
06
19
:
00
:
00
-
05
:
00
0.227371
2012
-
03
-
07
19
:
00
:
00
-
05
:
00
-
0.496922
2012
-
03
-
08
19
:
00
:
00
-
05
:
00
0.306389
2012
-
03
-
09
19
:
00
:
00
-
05
:
00
-
2.290613
Freq
:
D
,
dtype
:
float64
|
轉換不同的時間跨度
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
In
[
112
]
:
rng
=
pd
.
date_range
(
'1/1/2012'
,
periods
=
5
,
freq
=
'M'
)
In
[
113
]
:
ts
=
pd
.
Series
(
np
.
random
.
randn
(
len
(
rng
)
)
,
index
=
rng
)
In
[
114
]
:
ts
Out
[
114
]
:
2012
-
01
-
31
-
1.134623
2012
-
02
-
29
-
1.561819
2012
-
03
-
31
-
0.260838
2012
-
04
-
30
0.281957
2012
-
05
-
31
1.523962
Freq
:
M
,
dtype
:
float64
In
[
115
]
:
ps
=
ts
.
to_period
(
)
In
[
116
]
:
ps
Out
[
116
]
:
2012
-
01
-
1.134623
2012
-
02
-
1.561819
2012
-
03
-
0.260838
2012
-
04
0.281957
2012
-
05
1.523962
Freq
:
M
,
dtype
:
float64
In
[
117
]
:
ps
.
to_timestamp
(
)
Out
[
117
]
:
2012
-
01
-
01
-
1.134623
2012
-
02
-
01
-
1.561819
2012
-
03
-
01
-
0.260838
2012
-
04
-
01
0.281957
2012
-
05
-
01
1.523962
Freq
:
MS
,
dtype
:
float64
|
轉換時段並且使用一些運算函數, 下例中, 我們轉換年報11月到季度結束每日上午9點數據
1
2
3
4
5
6
7
8
9
10
11
|
In
[
118
]
:
prng
=
pd
.
period_range
(
'1990Q1'
,
'2000Q4'
,
freq
=
'Q-NOV'
)
In
[
119
]
:
ts
=
pd
.
Series
(
np
.
random
.
randn
(
len
(
prng
)
)
,
prng
)
In
[
120
]
:
ts
.
index
=
(
prng
.
asfreq
(
'M'
,
'e'
)
+
1
)
.
asfreq
(
'H'
,
's'
)
+
9
In
[
121
]
:
ts
.
head
(
)
Out
[
121
]
:
1990
-
03
-
01
09
:
00
-
0.902937
1990
-
06
-
01
09
:
00
0.068159
1990
-
09
-
01
09
:
00
-
0.057873
1990
-
12
-
01
09
:
00
-
0.368204
1991
-
03
-
01
09
:
00
-
1.144073
Freq
:
H
,
dtype
:
float64
|
自版本0.15起, pandas可以在數據楨中包含分類. 完整的文檔, 請查看分類介紹 and the API文檔.
1
|
In
[
122
]
:
df
=
pd
.
DataFrame
(
{
"id"
:
[
1
,
2
,
3
,
4
,
5
,
6
]
,
"raw_grade"
:
[
'a'
,
'b'
,
'b'
,
'a'
,
'a'
,
'e'
]
}
)
|
轉換原始類別爲分類數據類型.