Pandas數據分析教程——盤點那些常用的函數(上)

微信公衆號:「Python讀財」

如有問題或建議,請公衆號留言

在之前的文章中,以圖文的方式詳細講解了Pandas中groupbymerge以及mapapplyapplymap的原理,掌握好這些原理,再在這個基礎上進行一些拓展,基本就可以解決絕大部分比較複雜的數據處理操作了。幾篇文章如下,想回看的小夥伴可以再重溫一下:

Pandas數據處理三板斧,你會幾板?

Pandas數據分析——超好用的Groupby詳解

Pandas數據處理——一文詳解數據拼接方法merge

提升百倍的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()

作用對象:SeriesDataFrame

主要用途:返回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()

作用對象:SeriesDataFrame

主要用途:打印所用數據的一些基本信息,包括索引和列的數據類型和佔用的內存大小。

用法:

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()

作用對象:SeriesDataFrame

主要用途:生成描述性統計彙總,包括數據的計數和百分位數,有助於瞭解大致的數據分佈

用法:

# 默認生成數值列的描述性統計
# 使用 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()

作用對象:SeriesDataFrame

主要用途:判斷數據是否爲缺失值,是的話返回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()

作用對象:SeriesDataFrame

主要用途:大多數情況下數據量較大,不可能直接isna()後一個一個看是否是缺失值。any()isna()結合使用可以判斷某一列是否有缺失值。

用法:

In [23]: data.isna().any()
Out[23]:
company     True
salary     False
age        False
dtype: bool

.dropna()

作用對象:SeriesDataFrame

主要用途:刪掉含有缺失值的數據

用法:

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()

作用對象:SeriesDataFrame

主要用途:填充缺失數據

主要參數:

  • 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()

作用對象:SeriesDataFrame

主要用途:對數據按照索引進行排序

主要參數:

  • 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()

作用對象:SeriesDataFrame

主要用途:對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讀財」,第一時間獲取乾貨!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章