天天看點

二、Pandas基礎:DataFrame

一、DataFrame簡介

  • 一個表型格數的、據結構,包含有一組有序的列,每列可以是不同的值類型(數值、字元串布爾型等),DataFrame即有行索引也有列索引,可以被看做是由Series組成的字典。

二、DataFrame建立

  • DataFrame可以使用數組,清單和字典等方式進行建立
  • 當DataFrame數組和清單建立時,可指定參數index(行索引)和columns(列索引),如果不指定,預設用0的清單為序列号
  • 建立後的DataFrame,亦可修改行列參數
import pandas as pd
a = pd.DataFrame(
    [
        ['小紅', '小花', '小蘭'],
        [85, 93, 99]
    ])
b = pd.DataFrame(
    [
        ['小紅', 85],
        ['小花', 93],
        ['小蘭', 99]
    ], columns=['姓名', '成績']
)
data = {
    'apart': ['101', '102', '103', '104'],
    'profits': [681.5, 125, 15.5, 160],
    'year': [2007, 2010, 2012, 2008],
    'months': 8
}
c = pd.DataFrame(data, index=['one', 'two', 'three', 'four'])
print("普通清單建立:
", a)
print("帶列名的建立:
", b)
print("字典方式建立:
", c)
>>>
普通清單建立:
     0   1   2
0  小紅  小花  小蘭
1  85  93  99
帶列名的建立:
    姓名  成績
0  小紅  85
1  小花  93
2  小蘭  99
字典方式建立:
       apart  months  profits  year
one     101       8    681.5  2007
two     102       8    125.0  2010
three   103       8     15.5  2012
four    104       8    160.0  2008      

三、DataFrame查詢

DataFrame可以直接通過列索引名,檢視或修改整列值

如果想通過行索引名查詢的話,需要借助ix('行索引名')

import pandas as pd
data = {
    'apart': ['101', '102', '103', '104'],
    'profits': [681.5, 125, 15.5, 160],
    'year': [2007, 2010, 2012, 2008],
    'months': 8
}
c = pd.DataFrame(data, index=['one', 'two', 'three', 'four'])
print("列索引:
", c['year'])
print("行索引:
", c.ix['three'])
>>>
列索引:
one      2007
two      2010
three    2012
four     2008
Name: year, dtype: int64
行索引:
apart       103
months        8
profits    15.5
year       2012
Name: three, dtype: object      

四、資料過濾

  • dropna:丢棄(删除)有NaN的行, 可以通過門檻值(how參數)的調節對缺失值的容忍度
  • fillna:用指定值或者插值的方式填充缺失資料,比如: ffill或者bfill
  • isnull:傳回一個含有布爾值的對象,這些布爾值表示那些值是缺失值NA
  • notnull:傳回布爾值對象,非空位為True
############這裡示範一個特殊的填充方式############
import pandas as pd
import numpy as np
a = pd.DataFrame(np.random.rand(7, 3))
a.ix[:4, 1] = np.NaN
a.ix[:2, 2] = np.NaN
a=a.fillna({1: 0.5, 2: -1, 3: 2})#按照列索引進行填充
print(a)
>>>
          0         1         2
0  0.467758  0.500000 -1.000000
1  0.436149  0.500000 -1.000000
2  0.917665  0.500000 -1.000000
3  0.473428  0.500000  0.113061
4  0.703225  0.500000  0.090117
5  0.926495  0.962959  0.005762
6  0.414894  0.753270  0.243547

程序已結束,退出代碼0
      

五、DataFrame運算

DataFrame也保留了大量Numpy的運算機制,它們在DataFrame中均可以使用。

DataFrame中預設是按照列索引進行計算的,如果要按照行索引計算,需要在方法後面設定次元參數axis=1

import pandas as pd
a = pd.DataFrame(
    [
        [98.5, 89.5, 88.5],
        [98.5, 85.5, 80.0],
        [70.0, 85.0, 60.0],
        [80.0, 85.0, 82.0]
    ], columns=['國文', '數學', '英語']
)
print("原數組:
", a)
print("統計結果:
", a.describe())
>>>
統計結果:
               國文         數學         英語
count   4.000000   4.000000   4.000000
mean   86.750000  86.250000  77.625000
std    14.168627   2.179449  12.297527
min    70.000000  85.000000  60.000000
25%    77.500000  85.000000  75.000000
50%    89.250000  85.250000  81.000000
75%    98.500000  86.500000  83.625000
max    98.500000  89.500000  88.500000