Pandas入門學習(2)
文章目錄
Pandas 基本功能
主要介紹
Series
和DataFrame
物件,在實時資料處理中非常重要。
1、Series 基本屬性
屬性或方法 | 描述 |
---|---|
axes | 返回行軸標籤列表 |
dtype | 返回物件的資料型別(dtype) |
empty | 如果系列為空,返回 True |
ndim | 返回底層資料的維數。預設:1 |
size | 返回基礎資料中的元素數。 |
values | 將系列作為 ndarray 返回。 |
head() | 返回前 n 行。 |
tail() | 返回後 n 行。 |
axes 示例
返回Series的標籤列表
import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(5))
print(s.axes)
[RangeIndex(start=0, stop=5, step=1)]
empty 示例
返回布林值,表示物件是否為空
返回 True 表示物件為空
import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(5))
print(s.empty)
False
ndim 示例
返回物件的維數
import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(5))
n = pd.DataFrame(np.random.randn(6).reshape((2,3)))
print(s.ndim)
print(n.ndim)
1
2
size 示例
返回系列的大小(長度)
import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(5))
print(s.size)
5
values 示例
以列表形式返回系列中的實際資料值
import pandas as pd
import numpy as np
s = pd.Series(np.random.randn(5))
print(s.values)
[ 0.90074849 -0.01737094 -0.61616918 -0.05302233 -0.02019216]
head() 和 tail() 方法示例
head() 返回前
n
行。
預設:顯示前5
行,可以自定義這個數字。
tail() 返回前
n
行。
預設:顯示後5
行,可以自定義這個數字。
2、DataFrame 基本屬性
屬性或方法 | 描述 |
---|---|
T | 轉置行和列 |
axes | 返回一個列,行軸標籤和列軸標籤作為唯一的成員。 |
dtypes | 返回物件中的資料型別 |
empty | 如果為空返回 True |
ndim | 返回軸/陣列維度大小 |
shape | 返回 DataFrame 的維度元組 |
size | 返回元素數目 |
values | 返回 Numpy 表示 |
head() | 返回開頭 n 行 |
tail() | 返回最後 n 行 |
T(轉置)示例
將行和列進行交換位置
import pandas as pd
import numpy as np
data = {'Name':pd.Series(['Hubo','Xiaoli','Vim','KaKa']),
'Age':pd.Series([21,22,23,10]),
'Grade':pd.Series([4.5,4.1,3.3,2.0])}
df = pd.DataFrame(data)
print(df)
print(df.T)
Name Age Grade
0 Hubo 21 4.5
1 Xiaoli 22 4.1
2 Vim 23 3.3
3 KaKa 10 2.0
0 1 2 3
Name Hubo Xiaoli Vim KaKa
Age 21 22 23 10
Grade 4.5 4.1 3.3 2
axes 示例
返回行軸標籤和列標籤列表
import pandas as pd
import numpy as np
data = {'Name':pd.Series(['Hubo','Xiaoli','Vim','KaKa']),
'Age':pd.Series([21,22,23,10]),
'Grade':pd.Series([4.5,4.1,3.3,2.0])}
df = pd.DataFrame(data)
print(df.axes)
[RangeIndex(start=0, stop=4, step=1), Index(['Name', 'Age', 'Grade'], dtype='object')]
dtype 示例
返回每列的資料型別
import pandas as pd
import numpy as np
data = {'Name':pd.Series(['Hubo','Xiaoli','Vim','KaKa']),
'Age':pd.Series([21,22,23,10]),
'Grade':pd.Series([4.5,4.1,3.3,2.0])}
df = pd.DataFrame(data)
print(df.dtypes)
Name object
Age int64
Grade float64
dtype: object
empty 示例
返回布林值,物件為空返回
True
import pandas as pd
import numpy as np
data = {'Name':pd.Series(['Hubo','Xiaoli','Vim','KaKa']),
'Age':pd.Series([21,22,23,10]),
'Grade':pd.Series([4.5,4.1,3.3,2.0])}
df = pd.DataFrame(data)
print(df.empty)
False
ndim 示例
返回物件的維數,DataFrame是一個
2D
物件
import pandas as pd
import numpy as np
data = {'Name':pd.Series(['Hubo','Xiaoli','Vim','KaKa']),
'Age':pd.Series([21,22,23,10]),
'Grade':pd.Series([4.5,4.1,3.3,2.0])}
df = pd.DataFrame(data)
print(df.ndim)
2
shape 示例
返回表示
DataFrame
的維度元組
元組(a,b),其中a
是行數,b
表示列數
import pandas as pd
import numpy as np
data = {'Name':pd.Series(['Hubo','Xiaoli','Vim','KaKa']),
'Age':pd.Series([21,22,23,10]),
'Grade':pd.Series([4.5,4.1,3.3,2.0])}
df = pd.DataFrame(data)
print(df.shape)
(4,3)
size 示例
返回
DataFrame
中元素數
import pandas as pd
import numpy as np
data = {'Name':pd.Series(['Hubo','Xiaoli','Vim','KaKa']),
'Age':pd.Series([21,22,23,10]),
'Grade':pd.Series([4.5,4.1,3.3,2.0])}
df = pd.DataFrame(data)
print(df.size)
12
values 示例
將
DataFrame
中的實際資料作為ndarray
返回。
import pandas as pd
import numpy as np
data = {'Name':pd.Series(['Hubo','Xiaoli','Vim','KaKa']),
'Age':pd.Series([21,22,23,10]),
'Grade':pd.Series([4.5,4.1,3.3,2.0])}
df = pd.DataFrame(data)
print(df.values)
[['Hubo' 21 4.5]
['Xiaoli' 22 4.1]
['Vim' 23 3.3]
['KaKa' 10 2.0]]
head() 和 tail() 方法示例
head() 返回前
n
行。
預設:顯示前5
行,可以自定義這個數字。
tail() 返回前
n
行。
預設:顯示後5
行,可以自定義這個數字。
3、DataFrame 描述統計
Pandas 中描述統計資訊的函式
函式 | 描述 |
---|---|
count() |
非空觀測數量 |
sum() |
所有值之和 |
mean() |
所有值的平均值 |
median() |
所有值的中位數 |
mode() |
值的模值 |
std() |
值的標準偏差 |
min() |
所有值中的最小值 |
max() |
所有值中的最大值 |
abs() |
絕對值 |
prod() |
陣列元素的乘積 |
cumsum() |
累計總和 |
cumprod() |
累計乘積 |
describe() |
統計上面所有資訊 |
- 注意:
sum()
,cumsum()
函式能數字和字元一起工作。 - 注意:
abs()
這樣的函式就只能運算元字。
describe()示例
函式給出平均值、標準差等
預設:函式排除字元列,只列出數字列摘要
include()
:用於傳遞什麼列,預設:數字值
object
- 彙總字串列number
- 彙總數字列all
- 將所有列彙總在一起(不要傳遞列表)
import pandas as pd
import numpy as np
data = {'Name':pd.Series(['Hubo','Xiaoli','Vim','KaKa']),
'Age':pd.Series([21,22,23,10]),
'Grade':pd.Series([4.5,4.1,3.3,2.0])}
df = pd.DataFrame(data)
print(df.describe(include=['object']))
print(df.describe(include='all'))
Name
count 4
unique 4
top Hubo
freq 1
Name Age Grade
count 4 4.000000 4.000000
unique 4 NaN NaN
top Hubo NaN NaN
freq 1 NaN NaN
mean NaN 19.000000 3.475000
std NaN 6.055301 1.102648
min NaN 10.000000 2.000000
25% NaN 18.250000 2.975000
50% NaN 21.500000 3.700000
75% NaN 22.250000 4.200000
max NaN 23.000000 4.500000
4、Pandas函式應用
將函式應用於
Pandas
物件,常用三種方法,行或列或元素上進行操作。
pipe()
:表格函式應用apply()
:行或列函式應用applymap()
:元素函式應用
表格函式應用
將函式和適當數量的引數作為管道引數來執行自定義操作。
對整個DataFrame執行操作。
import pandas as pd
import numpy as np
def adder(ele1,ele2):
return ele1+ele2
df = pd.DataFrame(np.random.rand(5,3),columns=['A','B','C'])
print(df.pipe(adder,100))
A B C
0 100.881561 100.254161 100.390598
1 100.834995 100.787453 100.237498
2 100.191932 100.169226 100.185465
3 100.600637 100.055993 100.343523
4 100.877651 100.473381 100.438437
行或列函式應用
使用
apply
()方法沿DataFrame
或Panel
的軸應用任意函式
預設:操作按列執行,將每列列為陣列
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(5,3),columns=['A','B','C'])
print(df)
print(df.apply(np.mean))
print(df.apply(np.mean, axis=1))
df.apply(lambda x: x.max() - x.min())
print(df)
A B C
0 0.437312 0.799019 0.842078
1 0.697479 0.117254 0.628487
2 0.816568 0.972410 0.760768
3 0.450923 0.031967 0.658762
4 0.641998 0.633653 0.748719
A 0.608856
B 0.510861
C 0.727763
dtype: float64
0 0.692803
1 0.481074
2 0.849916
3 0.380551
4 0.674790
dtype: float64
A B C
0 0.437312 0.799019 0.842078
1 0.697479 0.117254 0.628487
2 0.816568 0.972410 0.760768
3 0.450923 0.031967 0.658762
4 0.641998 0.633653 0.748719
元素函式應用
在DataFrame上的方法applymap()和類似地在Series上的map()接受任何Python函式,並且返回單個值。
import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(5,3),columns=['A','B','C'])
print(df)
print(df['A'].map(lambda x: x * 100))
print(df.applymap(lambda x: x * 100))
A B C
0 0.191182 0.468353 0.569726
1 0.643632 0.903344 0.689815
2 0.226939 0.455236 0.054880
3 0.024711 0.063028 0.601296
4 0.502506 0.259828 0.903867
0 19.118187
1 64.363249
2 22.693934
3 2.471056
4 50.250610
Name: A, dtype: float64
A B C
0 19.118187 46.835287 56.972615
1 64.363249 90.334413 68.981530
2 22.693934 45.523638 5.487973
3 2.471056 6.302777 60.129613
4 50.250610 25.982770 90.386709
**注意:**該操作和表格函式應用的例項作用類似。
5、Pandas 重建索引
重建索引會更改
DataFrame
的行標籤和列標籤
重新索引意味著符合資料以匹配特定軸上的一組給定的標籤。
實現的操作
- 重新排序現有資料以匹配一組新的標籤
- 在沒有標籤資料的標籤位置插入缺失值
NA
標記
示例
import pandas as pd
import numpy as np
N = 10
df = pd.DataFrame({
'A': pd.date_range('2016-11-11',periods=N),
'C': np.linspace(0,num=N,stop=N-1),
'X': np.random.rand(N),
'W': np.random.choice(['Low','Mid','High'],N).tolist(),
'D': np.random.normal(100,10,size=(N)).tolist(),
})
df1 = df.reindex(index=[0,3,8], columns=['A','W','B'])
print(df)
print(df1)
A C X W D
0 2016-11-11 0.0 0.362752 Low 88.484337
1 2016-11-12 1.0 0.370616 Low 105.494904
2 2016-11-13 2.0 0.230432 High 129.169419
3 2016-11-14 3.0 0.054996 High 104.978711
4 2016-11-15 4.0 0.374281 High 98.874150
5 2016-11-16 5.0 0.855535 Mid 101.220366
6 2016-11-17 6.0 0.578576 Mid 91.053585
7 2016-11-18 7.0 0.243621 Low 97.590969
8 2016-11-19 8.0 0.014339 Mid 124.042128
9 2016-11-20 9.0 0.238797 Mid 107.222124
A W B
0 2016-11-11 Low NaN
3 2016-11-14 High NaN
8 2016-11-19 Mid NaN
重建索引與其他物件對齊
採取一個物件和重新索引,其軸被標記為與另一個物件相同。
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.random.rand(5,3), columns=['A','B','C'])
df2 = pd.DataFrame(np.random.rand(2,3), columns=['A','B','C'])
df1 = df1.reindex_like(df2)
print(df1)
A B C
0 0.625741 0.372294 0.146664
1 0.831084 0.350805 0.277556
重新命名
rename()
方法允許基於一些對映(字典或者系列)或任意函式來重新標記一個軸。
import pandas as pd
import numpy as np
df1 = pd.DataFrame(np.random.rand(5,3), columns=['A','B','C'])
print(df1)
print(df1.rename(columns={'A':'a','B':'b'}))
A B C
0 0.296367 0.849991 0.551506
1 0.750420 0.627995 0.501638
2 0.651334 0.538189 0.179588
3 0.320770 0.528002 0.263931
4 0.695984 0.025996 0.585251
a b C
0 0.296367 0.849991 0.551506
1 0.750420 0.627995 0.501638
2 0.651334 0.538189 0.179588
3 0.320770 0.528002 0.263931
4 0.695984 0.025996 0.585251