十分鐘帶你瞭解pandas常用方法

pandas常用知識


一、讀取csv文件爲dataframe
二、dataframe的數據概況
三、取列數據
四、取行數據
五、取某一單元格數據
六、缺失值處理
七、歸一化處理
八、排序
九、索引重新編號
十、求均值
十一、矢量化操作(批量操作)
十二、透視表

一、讀取csv文件爲dataframe
pandas很好的一點是,可以操作表文件。輸出爲dataframe格式,這點很nice。

使用pandas.read_csv()讀取csv文件,輸出爲dataframe格式數據。

這裏數據tran.csv數據集下載自kaggle網站。


import pandas as pd

filepath = r'/Users/suosuo/Desktop/titanic/train.csv'
df = pd.read_csv(filepath)
#爲了方便,我只顯示三行,其實結果並不是這樣子
print(df) 

輸出結果


   PassengerId  Survived  Pclass  \
0            1         0       3   
1            2         1       1   
2            3         1       3   

                                                Name     Sex   Age  SibSp  \
0                            Braund, Mr. Owen Harris    male  22.0      1   
1  Cumings, Mrs. John Bradley (Florence Briggs Th...  female  38.0      1   
2                             Heikkinen, Miss. Laina  female  26.0      0   

   Parch            Ticket     Fare Cabin Embarked  
0      0         A/5 21171   7.2500   NaN        S  
1      0          PC 17599  71.2833   C85        C  
2      0  STON/O2. 3101282   7.9250   NaN        S  

檢查數據類型


檢測下數據格式是否爲DataFrame
print(type(df))

運行結果


<class 'pandas.core.frame.DataFrame'>

二、 DataFrame數據概況
我們想知道數據如下知識: 1. 展示dataframe前後幾條記錄 2. 顯示dataframe的列名字 3. 查看dataframe的維度情況(幾行幾列)

2.1展示dataframe前後幾行


#展示前兩條記錄(根據需要顯示條數)
df.head(2)

運行結果

PassengerId Survived    Pclass  Name    Sex Age SibSp   Parch   Ticket  Fare    Cabin   Embarked
0   1   0   3   Braund, Mr. Owen Harris male    22.0    1   0   A/5 21171   7.2500  NaN S
1   2   1   1   Cumings, Mrs. John Bradley (Florence Briggs Th...   female  38.0    1   0   PC 17599    71.2833 C85 C
#展示後三條記錄
df.tail(3)

運行結果


PassengerId Survived    Pclass  Name    Sex Age SibSp   Parch   Ticket  Fare    Cabin   Embarked
888 889 0   3   Johnston, Miss. Catherine Helen "Carrie"    female  NaN 1   2   W./C. 6607  23.45   NaN S
889 890 1   1   Behr, Mr. Karl Howell   male    26.0    0   0   111369  30.00   C148    C
890 891 0   3   Dooley, Mr. Patrick male    32.0    0   0   370376  7.75    NaN Q

2.2展示dataframe列名


#展示列名
col_names = df.columns
col_names

運行結果


Index(['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex', 'Age', 'SibSp',
       'Parch', 'Ticket', 'Fare', 'Cabin', 'Embarked'],
      dtype='object')
#查看下col_namesgeshi
type(col_names)

運行結果


pandas.indexes.base.Index
#將col_names轉化爲list
col_list = col_names.tolist()
col_list

運行結果


['PassengerId',
 'Survived',
 'Pclass',
 'Name',
 'Sex',
 'Age',
 'SibSp',
 'Parch',
 'Ticket',
 'Fare',
 'Cabin',
 'Embarked']

三、從dataframe中取列數據
使用dataframe[column_name],返回series格式數據。

series序列數據類似於list,你可以近似等同於list。

只不過返回數據中會多一列index索引。如下面的左側數字序號

2.1 取一列數據

#這裏我們一列,如取Name列數據
df['Name'][:5]

運行結果


0                              Braund, Mr. Owen Harris
1    Cumings, Mrs. John Bradley (Florence Briggs Th...
2                               Heikkinen, Miss. Laina
3         Futrelle, Mrs. Jacques Heath (Lily May Peel)
4                             Allen, Mr. William Henry
Name: Name, dtype: object

2.2取多列數據


#這裏返回的數據還是dataframe格式,爲了方便也只顯示前幾條記錄
cols = ['PassengerId', 'Survived', 'Pclass', 'Name', 'Sex']
df[cols]

運行結果


PassengerId Survived    Pclass  Name    Sex
0   1   0   3   Braund, Mr. Owen Harris male
1   2   1   1   Cumings, Mrs. John Bradley (Florence Briggs Th...   female
2   3   1   3   Heikkinen, Miss. Laina  female
3   4   1   1   Futrelle, Mrs. Jacques Heath (Lily May Peel)    female
4   5   0   3   Allen, Mr. William Henry    male

四、從dataframe中取行數據(記錄)
這裏方法很多,有loc、iloc、ix。我就只寫ix,

總之沒必要學那麼多,搞糊塗了,夠用就好。

ix[row,col] 中括號中第一個參數row是行參數,你想選擇的數據行數。

第二個參數col是列參數,選擇你想要的列數據項。

4.1取一行數據


#第一行所有數據
df.ix[0,:

運行結果


PassengerId                          1
Survived                             0
Pclass                               3
Name           Braund, Mr. Owen Harris
Sex                               male
Age                                 22
SibSp                                1
Parch                                0
Ticket                       A/5 21171
Fare                              7.25
Cabin                              NaN
Embarked                             S
Name: 0, dtype: object

第一行的某幾列數據


col = ['Survived', 'Pclass', 'Sex']
df.ix[0,col]

運行結果


Survived       0
Pclass         3
Sex         male
Name: 0, dtype: object

4.2取多行數據


#取多行數據,所有列。這裏我選擇前5行,所有列.
#這裏是不是很像切片操作。python基礎很重要
df.ix[:5,:]

運行結果


PassengerId Survived    Pclass  Name    Sex Age SibSp   Parch   Ticket  Fare    Cabin   Embarked
0   1   0   3   Braund, Mr. Owen Harris male    22.0    1   0   A/5 21171   7.2500  NaN S
1   2   1   1   Cumings, Mrs. John Bradley (Florence Briggs Th...   female  38.0    1   0   PC 17599    71.2833 C85 C
2   3   1   3   Heikkinen, Miss. Laina  female  26.0    0   0   STON/O2. 3101282    7.9250  NaN S
3   4   1   1   Futrelle, Mrs. Jacques Heath (Lily May Peel)    female  35.0    1   0   113803  53.1000 C123    S
4   5   0   3   Allen, Mr. William Henry    male    35.0    0   0   373450  8.0500  NaN S
5   6   0   3   Moran, Mr. James    male    NaN 0   0   330877  8.4583  NaN Q

取多行,某幾列


df.ix[:5,col]

運行結果


Survived    Pclass  Sex
0   0   3   male
1   1   1   female
2   1   3   female
3   1   1   female
4   0   3   male
5   0   3   male

五、取某一單元格數據
會了三四節,這部分其實你已經會了。

比如我想獲取

第一行第一列。df.ix[0,0]

第三行第七列。df.ix[2,6]


df.ix[0,0]

運行結果


1
df.ix[2,6]

運行結果


0

六、缺失值處理
缺失值一般標記爲NaN,處理辦法如下

df.dropna(axis)

默認直接使用df.dropna()

axis=1,按照行進行缺失值處理

axis=0,按照列進行缺失值處理

df.dropna(axis=0,subset)

axis=0,按照列方向處理subset中的列缺失值

subset=[column] subset含有一個或多個列名的的list

6.1按照行進行缺失值處理

df.dropna(axis=1)


#爲了顯示方便,只顯示前五行。
df.dropna(axis=1)

運行結果


PassengerId Survived    Pclass  Name    Sex SibSp   Parch   Ticket  Fare
0   1   0   3   Braund, Mr. Owen Harris male    1   0   A/5 21171   7.2500
1   2   1   1   Cumings, Mrs. John Bradley (Florence Briggs Th...   female  1   0   PC 17599    71.2833
2   3   1   3   Heikkinen, Miss. Laina  female  0   0   STON/O2. 3101282    7.9250
3   4   1   1   Futrelle, Mrs. Jacques Heath (Lily May Peel)    female  1   0   113803  53.1000
4   5   0   3   Allen, Mr. William Henry    male    0   0   373450  8.0500

6.2按照列進行缺失值處理


#按照列處理缺失值(爲顯示方便,只顯示前5行)
df.dropna(axis=0)

運行結果


PassengerId Survived    Pclass  Name    Sex Age SibSp   Parch   Ticket  Fare    Cabin   Embarked
1   2   1   1   Cumings, Mrs. John Bradley (Florence Briggs Th...   female  38.0    1   0   PC 17599    71.2833 C85 C
3   4   1   1   Futrelle, Mrs. Jacques Heath (Lily May Peel)    female  35.0    1   0   113803  53.1000 C123    S
6   7   0   1   McCarthy, Mr. Timothy J male    54.0    0   0   17463   51.8625 E46 S
10  11  1   3   Sandstrom, Miss. Marguerite Rut female  4.0 1   1   PP 9549 16.7000 G6  S
11  12  1   1   Bonnell, Miss. Elizabeth    female  58.0    0   0   113783  26.5500 C103    S

對指定列進行缺失值處理


df.dropna(axis=0,subset=['Sex','Age'])

運行結果


PassengerId Survived    Pclass  Name    Sex Age SibSp   Parch   Ticket  Fare    Cabin   Embarked
0   1   0   3   Braund, Mr. Owen Harris male    22.0    1   0   A/5 21171   7.2500  NaN S
1   2   1   1   Cumings, Mrs. John Bradley (Florence Briggs Th...   female  38.0    1   0   PC 17599    71.2833 C85 C
2   3   1   3   Heikkinen, Miss. Laina  female  26.0    0   0   STON/O2. 3101282    7.9250  NaN S
3   4   1   1   Futrelle, Mrs. Jacques Heath (Lily May Peel)    female  35.0    1   0   113803  53.1000 C123    S
4   5   0   3   Allen, Mr. William Henry    male    35.0    0   0   373450  8.0500  NaN S

七、歸一化處理
數據集中,不同的列的數據可能在不同量級,如果直接進行分析。模型會認爲數字大的影響力大,數字小的影響力小。

最終結果可能導致量級小的變量被剔除出模型。因此需要將數據歸一化,變成同一量級的數據,這就是歸一化操作。

在這裏我們只對一列操作下,其餘列也需要操作,但爲了方便,這裏只寫一列的歸一化處理。

處理步驟:

  1. 選取該列的最大值

max_value = df[col].max()

2.該列所有值均除以max_value

這裏要注意,我們會用到pandas特性,矢量化操作,

也就是可以對一個列表進行批量同樣的操作。


#這裏我們選Fare列進行歸一化,先看下Fare的數據
#爲了方便顯示,只顯示了前10個
df['Fare']

運行結果


0     7.2500
1    71.2833
2     7.9250
3    53.1000
4     8.0500
5     8.4583
6    51.8625
7    21.0750
8    11.1333
9    30.0708
Name: Fare, dtype: float64

這裏我們選Fare列進行歸一化


max_value = df['Fare'].max()
max_value

運行結果


512.32920000000001

歸一化,並將數據傳入新列new_Fare


df['new_Fare']=df['Fare']/max_value
df['new_Fare']

運行結果


0    0.014151
1    0.139136
2    0.015469
3    0.103644
4    0.015713
5    0.016510
6    0.101229
7    0.041136
8    0.021731
9    0.058694
Name: new_Fare, dtype: float64

八、排序
df.sort_values(col,inplace,ascending)

col 對col列進行排序

inplace 布爾型值,是否原地操作。True時,操作結果覆蓋掉原始數據,原始數據被修改.False時,新建一個新的數據,原始數據沒有被修改

ascending 布爾型值。升序降序。 False降序,True升序


#對Age列進行降序操作,不修改原始數據
df.sort_values('Age',inplace=False,ascending=False)

運行結果


PassengerId Survived    Pclass  Name    Sex Age SibSp   Parch   Ticket  Fare    Cabin   Embarked    new_Fare
630 631 1   1   Barkworth, Mr. Algernon Henry Wilson    male    80.0    0   0   27042   30.0000 A23 S   0.058556
851 852 0   3   Svensson, Mr. Johan male    74.0    0   0   347060  7.7750  NaN S   0.015176
493 494 0   1   Artagaveytia, Mr. Ramon male    71.0    0   0   PC 17609    49.5042 NaN C   0.096626
96  97  0   1   Goldschmidt, Mr. George B   male    71.0    0   0   PC 17754    34.6542 A5  C   0.067640
116 117 0   3   Connors, Mr. Patrick    male    70.5    0   0   370369  7.7500  NaN Q   0.015127

九、索引重新
將排序後的索引重新排序

df.reset_index(drop)

drop 爲布爾型值,True表示修改原始數據的索引。False保留原始數據索引序列。


df.reset_index(drop=False)

運行結果


index   PassengerId Survived    Pclass  Name    Sex Age SibSp   Parch   Ticket  Fare    Cabin   Embarked    new_Fare
0   630 631 1   1   Barkworth, Mr. Algernon Henry Wilson    male    80.0    0   0   27042   30.0000 A23 S   0.058556
1   851 852 0   3   Svensson, Mr. Johan male    74.0    0   0   347060  7.7750  NaN S   0.015176
2   493 494 0   1   Artagaveytia, Mr. Ramon male    71.0    0   0   PC 17609    49.5042 NaN C   0.096626
3   96  97  0   1   Goldschmidt, Mr. George B   male    71.0    0   0   PC 17754    34.6542 A5  C   0.067640
4   116 117 0   3   Connors, Mr. Patrick    male    70.5    0   0   370369  7.7500  NaN Q   0.015127

十、求平均值
10.1所有列的平均值信息


df.mean()

運行結果


PassengerId    446.000000
Survived         0.383838
Pclass           2.308642
Age             29.699118
SibSp            0.523008
Parch            0.381594
Fare            32.204208
new_Fare         0.062858
dtype: float64

10.2 單個列的平均值

df['Age'].mean()

運行結果

29.69911764705882

十一、矢量化操作(批量操作)
一般對如list樣式的數據批量操作,需要寫循環,但是這樣費時費力。

pandas基於numpy,可進行矢量化操作,一行就能完成複雜的循環語句,而且運行效率還很高。

11.1對Age列批量加10


df['Age']+10).head

運行結果


630    90.0
851    84.0
493    81.0
96     81.0
116    80.5
672    80.0
745    80.0
33     76.0
54     75.0
280    75.0
Name: Age, dtype: float64

11.2對Age列批量減20


df['Age']-10

運行結果

630    70.0
851    64.0
493    61.0
96     61.0
116    60.5
672    60.0
745    60.0
33     56.0
54     55.0
280    55.0
Name: Age, dtype: float64

十二、透視表
類似groupby,這個透視表不好說是什麼意思。大家直接看結果,好不?

df.pivot_table(index=col1,values=col2,aggfunc='numpy函數')

圍繞index參數列,分析各個col2,aggfunc是np函數,當然這裏的aggfunc也可以是自定義函數。

#分析平均年齡對對生存率的影響。
#0爲死亡,1爲生存。
#這裏我們發現年齡對生存率有影響。
import numpy as np
df.pivot_table(index='Survived',values='Age',aggfunc=np.mean)

運行結果


Survived
0    30.626179
1    28.343690
Name: Age, dtype: float64
#分析倉位等級對生存率影響。0爲死亡,1爲生存。
#倉位爲一等二等三等分別取值1,2,3
#一等艙最高級。我們發現倉位等級對生存也有影響。

df.pivot_table(index='Survived',values='Pclass',aggfunc=np.mean)
Survived
0    2.531876
1    1.950292
Name: Pclass, dtype: float64
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章