Pandas库入门

Pandas库入门

pandas有两大数据类型seriesdataframe

Series

import pandas as pd
pd.Series(range(20))
0      0
1      1
2      2
3      3
4      4
5      5
6      6
7      7
8      8
9      9
10    10
11    11
12    12
13    13
14    14
15    15
16    16
17    17
18    18
19    19
dtype: int64

这个就是Series,左边的是index,右边的是value

Series的创建方法

由列表创建

pd.Series([9, 8, 7, 6])
0    9
1    8
2    7
3    6
dtype: int64

其中参数index就是索引,默认是自定义索引,即从0开始

pd.Series([9, 8, 7, 6], ['a', 'b', 'c', 'd'])
a    9
b    8
c    7
d    6
dtype: int64

由标量创建

pd.Series(25, ['a', 'b', 'c'])
a    25
b    25
c    25
dtype: int64

由字典创建

pd.Series({'a':9, 'b':8, 'c':7})
a    9
b    8
c    7
dtype: int64
pd.Series({'a':9, 'b':8, 'c':7}, index=['c', 'a', 'b', 'd'])
c    7.0
a    9.0
b    8.0
d    NaN
dtype: float64

由ndarray类型创建

import numpy as np
pd.Series(np.arange(5))
0    0
1    1
2    2
3    3
4    4
dtype: int32
pd.Series(np.arange(5), index=np.arange(9, 4, -1))
9    0
8    1
7    2
6    3
5    4
dtype: int32

Series的属性

b = pd.Series([9, 8, 7, 6], ['a', 'b', 'c', 'd'])
b
a    9
b    8
c    7
d    6
dtype: int64
b.index
Index(['a', 'b', 'c', 'd'], dtype='object')
b.values
array([9, 8, 7, 6], dtype=int64)

通过索引获得值

b['b']

8

但是Series含有默认索引即从0开始的下标

b[1]

8

b[3]

6

b[:3]
a    9
b    8
c    7
dtype: int64
b[b > b.median()] 
a    9
b    8
dtype: int64

可以看出对Series进行切片等操作返回值仍然为Series类型

'c' in b # 判断索引是否存在
True
0 in b
False
b.get('f', 100) # 获得f索引所对应的值,若b中不存在f索引,则返回100
100

Series之间的运算

a = pd.Series([1, 2, 3], ['c', 'd', 'e'])
b = pd.Series([9, 8, 7, 6], ['a', 'b', 'c', 'd'])
a + b # Series相加是索引相同的值相加
a    NaN
b    NaN
c    8.0
d    8.0
e    NaN
dtype: float64

DataFrame

DateFrame 横轴:column axis=1 纵轴:index axis=0

pd.DataFrame(np.arange(10).reshape(2, 5))
0 1 2 3 4
0 0 1 2 3 4
1 5 6 7 8 9

这个就是一个DataFrame

创建DataFrame的方法

通过字典创建

dt = {'one': pd.Series([1, 2, 3], ['a', 'b', 'c']),
     'two': pd.Series([9, 8, 7, 6], ['a', 'b', 'c', 'd'])}
d = pd.DataFrame(dt)
d
one two
a 1.0 9
b 2.0 8
c 3.0 7
d NaN 6
pd.DataFrame(dt, index=['b', 'c', 'd'], columns=['two', 'three']) 
two three
b 8 NaN
c 7 NaN
d 6 NaN
dl = {'城市': ['北京', '上海', '广州', '深圳', '沈阳'],
     '环比': [101.5, 101.2, 101.3, 102.0, 100.1],
     '同比': [120.7, 127.3, 119.4, 140.9, 101.4],
     '定基': [121.4, 127.8, 120.0, 145.5, 101.6]}
d = pd.DataFrame(dl, index=['c1', 'c2', 'c3', 'c4', 'c5'])
d
城市 环比 同比 定基
c1 北京 101.5 120.7 121.4
c2 上海 101.2 127.3 127.8
c3 广州 101.3 119.4 120.0
c4 深圳 102.0 140.9 145.5
c5 沈阳 100.1 101.4 101.6
d.index
Index(['c1', 'c2', 'c3', 'c4', 'c5'], dtype='object')
d.columns
Index(['城市', '环比', '同比', '定基'], dtype='object')
d.values
array([['北京', 101.5, 120.7, 121.4],
       ['上海', 101.2, 127.3, 127.8],
       ['广州', 101.3, 119.4, 120.0],
       ['深圳', 102.0, 140.9, 145.5],
       ['沈阳', 100.1, 101.4, 101.6]], dtype=object)
d['同比']
c1    120.7
c2    127.3
c3    119.4
c4    140.9
c5    101.4
Name: 同比, dtype: float64
d['同比']['c2']
127.3
d = d.reindex(index=['c5', 'c4', 'c3', 'c2', 'c1'])
d = d.reindex(columns=['城市', '同比', '环比', '定基'])
d
城市 同比 环比 定基
c5 沈阳 101.4 100.1 101.6
c4 深圳 140.9 102.0 145.5
c3 广州 119.4 101.3 120.0
c2 上海 127.3 101.2 127.8
c1 北京 120.7 101.5 121.4

reindex函数改变索引顺序

drop函数删除指定的行或者列

d.drop('c5')
城市 同比 环比 定基
c4 深圳 140.9 102.0 145.5
c3 广州 119.4 101.3 120.0
c2 上海 127.3 101.2 127.8
c1 北京 120.7 101.5 121.4
d.drop('同比', axis=1) # drop默认操作0轴上的元素
城市 环比 定基
c5 沈阳 100.1 101.6
c4 深圳 102.0 145.5
c3 广州 101.3 120.0
c2 上海 101.2 127.8
c1 北京 101.5 121.4

DataFrame之间的运算

a = pd.DataFrame(np.arange(12).reshape(3, 4))
b = pd.DataFrame(np.arange(20).reshape(4, 5))
a + b
0 1 2 3 4
0 0.0 2.0 4.0 6.0 NaN
1 9.0 11.0 13.0 15.0 NaN
2 18.0 20.0 22.0 24.0 NaN
3 NaN NaN NaN NaN NaN

实际上就是索引相同的值之间进行运算

b.add(a, fill_value=100) # 先用100填充a
0 1 2 3 4
0 0.0 2.0 4.0 6.0 104.0
1 9.0 11.0 13.0 15.0 109.0
2 18.0 20.0 22.0 24.0 114.0
3 115.0 116.0 117.0 118.0 119.0
c = pd.Series(np.arange(4))
c - 10
0   -10
1    -9
2    -8
3    -7
dtype: int32
b - c # 横向运算
0 1 2 3 4
0 0.0 0.0 0.0 0.0 NaN
1 5.0 5.0 5.0 5.0 NaN
2 10.0 10.0 10.0 10.0 NaN
3 15.0 15.0 15.0 15.0 NaN
b.sub(c, axis=0)
0 1 2 3 4
0 0 1 2 3 4
1 4 5 6 7 8
2 8 9 10 11 12
3 12 13 14 15 16

布尔运算

a = pd.DataFrame(np.arange(12).reshape(3, 4))
b = pd.DataFrame(np.arange(12, 0, -1).reshape(3, 4))
a > b
0 1 2 3
0 False False False False
1 False False False True
2 True True True True

你可能感兴趣的:(Pandas库入门)