微信公衆號:「Python讀財」
如有問題或建議,請公衆號留言
在之前的文章中,以圖文的方式詳細講解了Pandas中groupby
,merge
以及map
、apply
、applymap
的原理,掌握好這些原理,再在這個基礎上進行一些拓展,基本就可以解決絕大部分比較複雜的數據處理操作了。幾篇文章如下,想回看的小夥伴可以再重溫一下:
提升百倍的Pandas性能優化方法,讓你的pandas飛起來!
這篇文章爲大家整理一下實際使用中比較高頻的一些用法,在這裏需要強調一點就是,不建議初學者上來就把Pandas中所有的方法都啃一遍,這樣效率太低而且很多方法平時基本用不到,啃下來也容易忘。正確的方式是先把常用的方法先吃透,然後找個項目直接上手,遇到現有方法處理不了的再查看官方文檔。
通過”人工智能“的方式,我從官方文檔中篩選出一些比較常用的方法,有二十多個,初學者可以先試着把這些吃透了。爲了避免過多看不下去,這篇文章就先介紹10個。
用於演示的數據如下:
In [15]: data
Out[15]:
company salary age
0 NaN 43 21
1 A 8 41
2 A 28 26
3 C 42 28
4 A 33 26
5 C 20 18
6 A 48 43
7 B 25 23
8 B 39 18
.head()
作用對象:Series
和DataFrame
主要用途:返回DataFrame
的前N行。當數據量較大時,使用.head()
可以快速對數據有個大致瞭解。
用法:
#默認返回前5行,N可以自行設定
In [16]: data.head()
Out[16]:
company salary age
0 NaN 43 21
1 A 8 41
2 A 28 26
3 C 42 28
4 A 33 26
.info()
作用對象:Series
和DataFrame
主要用途:打印所用數據的一些基本信息,包括索引和列的數據類型和佔用的內存大小。
用法:
In [17]: data.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 9 entries, 0 to 8
Data columns (total 3 columns):
company 8 non-null object
salary 9 non-null int32
age 9 non-null int32
dtypes: int32(2), object(1)
memory usage: 224.0+ bytes
.describe()
作用對象:Series
和DataFrame
主要用途:生成描述性統計彙總,包括數據的計數和百分位數,有助於瞭解大致的數據分佈
用法:
# 默認生成數值列的描述性統計
# 使用 include = 'all'生成所有列
In [18]: data.describe()
Out[18]:
salary age
count 9.000000 9.000000
mean 31.777778 27.111111
std 12.804079 9.143911
min 8.000000 18.000000
25% 25.000000 21.000000
50% 33.000000 26.000000
75% 42.000000 28.000000
max 48.000000 43.000000
.value_counts()
作用對象:Series
主要用途:統計分類變量中每個類的數量,比如company
中各個公司都有多少人
主要參數:
-
normalize (boolean, default False)
返回各類的佔比
-
sort (boolean, default True)
是否對統計結果進行排序
-
ascending (boolean, default False)
是否升序排列
用法:
In [19]: data['company'].value_counts()
Out[19]:
A 4
B 2
C 2
Name: company, dtype: int64
# 返回佔比情況
In [20]: data['company'].value_counts(normalize=True)
Out[20]:
A 0.50
B 0.25
C 0.25
Name: company, dtype: float64
# 升序排列
In [21]: data['company'].value_counts(ascending=True)
Out[21]:
C 2
B 2
A 4
Name: company, dtype: int64
.isna()
作用對象:Series
和DataFrame
主要用途:判斷數據是否爲缺失值,是的話返回True
,否的話返回False
用法:
In [22]: data.isna()
Out[22]:
company salary age
0 True False False
1 False False False
2 False False False
3 False False False
4 False False False
5 False False False
6 False False False
7 False False False
8 False False False
.any()
作用對象:Series
和DataFrame
主要用途:大多數情況下數據量較大,不可能直接isna()
後一個一個看是否是缺失值。any()
和isna()
結合使用可以判斷某一列是否有缺失值。
用法:
In [23]: data.isna().any()
Out[23]:
company True
salary False
age False
dtype: bool
.dropna()
作用對象:Series
和DataFrame
主要用途:刪掉含有缺失值的數據
用法:
In [24]: data.dropna()
Out[24]:
company salary age
1 A 8 41
2 A 28 26
3 C 42 28
4 A 33 26
5 C 20 18
6 A 48 43
7 B 25 23
8 B 39 18
.fillna()
作用對象:Series
和DataFrame
主要用途:填充缺失數據
主要參數:
-
value (scalar, dict, Series, or DataFrame)
用於填充缺失值的值
-
method ({‘backfill’, ‘bfill’, ‘pad’, ‘ffill’, None}, default None)
缺失值的填充方式,常用的是
bfill
後面的值進行填充,ffill
用前面的值進行填充 -
inplace (boolean, default False)
是否作用於原對象
用法:
In [26]: data.fillna('B')
Out[26]:
company salary age
0 B 43 21
1 A 8 41
2 A 28 26
3 C 42 28
4 A 33 26
5 C 20 18
6 A 48 43
7 B 25 23
8 B 39 18
# 用缺失值後面的值來填充(這裏NaN後面是'A')
In [25]: data.fillna(method='bfill')
Out[25]:
company salary age
0 A 43 21
1 A 8 41
2 A 28 26
3 C 42 28
4 A 33 26
5 C 20 18
6 A 48 43
7 B 25 23
8 B 39 18
.sort_index()
作用對象:Series
和DataFrame
主要用途:對數據按照索引進行排序
主要參數:
-
ascending (boolean, default False)
是否升序排列
-
inplace (boolean, default False)
是否作用於原對象
用法:
# 按索引降序排列
In [27]: data.sort_index(ascending=False)
Out[27]:
company salary age
8 B 39 18
7 B 25 23
6 A 48 43
5 C 20 18
4 A 33 26
3 C 42 28
2 A 28 26
1 A 8 41
0 NaN 43 21
.sort_values()
作用對象:Series
和DataFrame
主要用途:對DataFrame
而言,按照某列進行排序(用by
參數控制),對Series
按數據列進行排序。
主要參數:
-
by (str or list of str)
作用於
DataFrame
時需要指定排序的列 -
ascending (boolean, default False)
是否升序排列
In [28]: data.sort_values(by='salary')
Out[28]:
company salary age
1 A 8 41
5 C 20 18
7 B 25 23
2 A 28 26
4 A 33 26
8 B 39 18
3 C 42 28
0 NaN 43 21
6 A 48 43
原創不易,如果覺得有點用,希望可以隨手點個贊,拜謝各位老鐵。
掃碼關注公衆號 「Python讀財」,第一時間獲取乾貨!