Python之Pandas子產品講解及案例
一、安裝Pandas
pip install Pandas
二、簡介
Pandas是一個開源的,BSD許可的庫,為Python (opens new window)程式設計語言提供高性能,易于使用的資料結構和資料分析工具。
Pandas是NumFOCUS (opens new window)贊助的項目。這将有助于確定Pandas成為世界級開源項目的成功,并有可能捐贈 (opens new window)給該項目。
另外,獲得 Pandas 的最佳方式是通過 conda(opens new window):
conda install Pandas
但是此方法安裝較慢,不太推薦,可以直接pip。
三、Series類
1、Series對象的實作
Series對象是相當于一個一維的數組
方法1
import pandas as pd
"""
導入pandas子產品
"""
ser_0 = pd.Series(data=[0, 1, 2, 3, 4, 5])
# data 參數表示:所取得的數值是多少
print(ser_0)
# output>
0 0
1 1
2 2
3 3
4 4
5 5
dtype: int64
# 第一列是索引(indexs)
# 第二列是數值(values)
方法2
import pandas as pd
ser_1 = pd.Series(data=[0, 1, 2, 3], index=['a', 'b', 'c', 'd'])
# index 表示自定義索引
print(ser_1)
# output>
a 0
b 1
c 2
d 3
dtype:
方法3
import pandas as pd
config = {
'one':1,
'two':2,
'three':3,
'four':4
}
# 字典
ser_2 = pd.Series(config)
print(ser_2)
# output>
one 1
two 2
three 3
four 4
dtype:
2、Head與Tail
head() 與 tail() 用于快速預覽 Series 與 DataFrame,預設顯示 5 條資料,也可以指定顯示資料的數量。
這裡先以Series為例,DataFrame會在後續講解。
下面将用到numpy子產品,關于numpy子產品的講解可以參見我的另一篇博文:
python 之 numpy 子產品詳細講解及其應用案例
連結
import pandas as pd
import numpy as np
index_list = list('abcdefghijklmnopqrst')
data_list = np.arange(20)
ser = pd.Series(data=data_list, index=index_list)
print(ser.head())
print(ser.head(3))
print(ser.tail())
print(ser.tail(3))
# output>
a 0
b 1
c 2
d 3
e 4
dtype: int32
a 0
b 1
c 2
dtype: int32
p 15
q 16
r 17
s 18
t 19
dtype: int32
r 17
s 18
t 19
dtype:
3、屬性與底層資料
index屬性
values屬性
import pandas as pd
ser = pd.Series(data=[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10], index=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'l'])
print(ser.index)
print(ser.values)
# output>
Index(['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'j', 'k', 'l'], dtype='object')
[ 0 1 2 3 4 5 6 7 8 9 10]
4、Series對象的切片操作
實際上,Series對象的切片與數組的切片差别并不大。
import pandas as pd
ser = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 11])
print(ser[0])
print(ser[1:7])
print(ser[0:8:2])
print(ser[:])
print(ser[-5:-2])
# output>
1
1 2
2 3
3 4
4 5
5 6
6 7
dtype: int64
0 1
2 3
4 5
6 7
dtype: int64
0 1
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 0
10 11
dtype: int64
6 7
7 8
8 9
dtype:
5、Series對象的一些常用方法
1、Series.index
索引
2、Series.values
數值
3、Series.drop(index)
删除某一個資料
4、Series.sum
求所有元素的和
等
四、DataFrame類
1、DataFrame對象的實作
方法1
import pandas as pd
df = pd.DataFrame([[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]])
print(df)
方法2
import pandas as pd
df = pd.DataFrame(data=[[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]], index=['a', 'b'])
print(df)
方法3
import pandas as pd
config={
'a': [1, 2, 3, 4, 5],
'b': [4, 5, 6, 7, 8],
'c': [2, 4, 6, 8, 10]
}
df = pd.DataFrame(data=config,index=['one', 'two', 'three', 'four', 'five'])
print(df)
2、DataFrame的取值以及切片
1、取值
Head、 Tail 方法
import pandas as pd
config = {
'a': [0, 1, 2, 3, 4, 5, 6, 7],
'b': [8, 9, 10, 11, 12, 13, 14, 15],
'c': [3, 6, 9, 11, 13, 15, 17, 19],
'd': [2, 4, 6, 9, 12, 14, 16, 18,]
}
df = pd.DataFrame(data=config, index=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print(df)
print(df.head())
print(df.tail())
某一個位置處的值:
import pandas as pd
config = {
'a': [0, 1, 2, 3, 4, 5, 6, 7],
'b': [8, 9, 10, 11, 12, 13, 14, 15],
'c': [3, 6, 9, 11, 13, 15, 17, 19],
'd': [2, 4, 6, 9, 12, 14, 16, 18,]
}
df = pd.DataFrame(data=config, index=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print(df.a.a)
print(df.a.b)
print(df.c.f)
# 實際上是相當于取出字典中的資料的類似方法,
# 先去取一列,
# 再從這一列中去取出來某一行的資料點。
# output>
0
1
15
2、切片
1、行切片
import pandas as pd
config = {
'a': [0, 1, 2, 3, 4, 5, 6, 7],
'b': [8, 9, 10, 11, 12, 13, 14, 15],
'c': [3, 6, 9, 11, 13, 15, 17, 19],
'd': [2, 4, 6, 9, 12, 14, 16, 18,]
}
df = pd.DataFrame(data=config, index=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print(df[0:4])
# 從第零行切刀第三行資料
print(df['a':'c'])
# 從下标為 a 的行一直切到下标為 b 的行
2、列切片
import pandas as pd
config = {
'a': [0, 1, 2, 3, 4, 5, 6, 7],
'b': [8, 9, 10, 11, 12, 13, 14, 15],
'c': [3, 6, 9, 11, 13, 15, 17, 19],
'd': [2, 4, 6, 9, 12, 14, 16, 18,]
}
df = pd.DataFrame(data=config, index=['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h'])
print(df.a)
print(df.b)
print(df.c)
# output>
a 0
b 1
c 2
d 3
e 4
f 5
g 6
h 7
Name: a, dtype: int64
a 8
b 9
c 10
d 11
e 12
f 13
g 14
h 15
Name: b, dtype: int64
a 3
b 6
c 9
d 11
e 13
f 15
g 17
h 19
Name: c, dtype:
3、舉一個例子,利用以上的類以及numpy來實作一個時間清單
import pandas as pd
import numpy as np
dates = pd.date_range('20130101', periods=6)
df = pd.DataFrame(np.random.randn(6, 4), index=dates, columns=list('ABCD'))
print(df)
print(df.dtypes)
# 檢視類型
print(df.describe())
# 檢視對資料的統計結果
# output>
A B C D
2013-01-01 -1.177484 0.516432 -0.425316 -0.499715
2013-01-02 -0.128610 -1.052472 -0.151716 -0.019494
2013-01-03 0.257262 -0.857907 0.111126 -1.584577
2013-01-04 0.383851 -0.952546 -0.867269 -0.760178
2013-01-05 1.489054 -0.727922 -0.190620 0.230165
2013-01-06 -0.210085 1.699750 -0.100482 -0.784437
A float64
B float64
C float64
D float64
dtype: object
A B C D
count 6.000000 6.000000 6.000000 6.000000
mean 0.102332 -0.229111 -0.270713 -0.569706
std 0.873513 1.106510 0.339157 0.641838
min -1.177484 -1.052472 -0.867269 -1.584577
25% -0.189716 -0.928886 -0.366642 -0.778372
50% 0.064326 -0.792915 -0.171168 -0.629947
75% 0.352204 0.205343 -0.113291 -0.139549
max 1.489054 1.699750 0.111126 0.230165