1. 程式人生 > >Pandas入門學習(2)

Pandas入門學習(2)

文章目錄

Pandas 基本功能

主要介紹SeriesDataFrame物件,在實時資料處理中非常重要。

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()方法沿DataFramePanel的軸應用任意函式
預設:操作按列執行,將每列列為陣列

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