Pandas库入门(二)

pandas库入门 - 补充

MultiIndex与Panel

MultiIndex

通过set_index([...])可以设置索引,当设置多个索引时,Index对象会成为MultiIndex对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
>>> d.set_index(['城市', '环比'])
同比 定基
城市 环比
北京 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
>>> d.set_index(['城市', '环比']).index
MultiIndex([('北京', 101.5),
('上海', 101.2),
('广州', 101.3),
('深圳', 102.0),
('沈阳', 100.1)],
names=['城市', '环比'])

MultiIndex是多级或分层索引,拥有属性nameslevels

1
2
3
4
>>> d.set_index(['城市', '环比']).index.names
FrozenList(['城市', '环比'])
>>> d.set_index(['城市', '环比']).index.levels
FrozenList([['上海', '北京', '广州', '沈阳', '深圳'], [100.1, 101.2, 101.3, 101.5, 102.0]])

Panel

面板数据,用于存储三维数据(从pandas 0.20.0开始已经弃用),推荐使用DataFrame

1
2
3
4
>>> p = pd.Panel(numpy.arange(24).reshape(4,3,2),items=list('ABCD'),major_axis=pd.date_range('20210210',periods=3),minor_axis=['first','second'])
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Panel() takes no arguments # Panel已弃用

组合索引 loc与iloc

lociloc可以实现组合索引,其中loc针对自定义索引,iloc针对自动索引

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
>>> 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.loc[d.index[:3], ['城市', '同比']]
城市 同比
c1 北京 120.7
c2 上海 127.3
c3 广州 119.4
>>> d.iloc[:3, d.columns.get_indexer(['城市', '同比'])]
城市 同比
c1 北京 120.7
c2 上海 127.3
c3 广州 119.4

排序

  • 对内容进行排序sort_values

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    # 默认升序
    >>> d.sort_values(by='环比')
    城市 环比 同比 定基
    c5 沈阳 100.1 101.4 101.6
    c2 上海 101.2 127.3 127.8
    c3 广州 101.3 119.4 120.0
    c1 北京 101.5 120.7 121.4
    c4 深圳 102.0 140.9 145.5
    # 指定降序
    >>> d.sort_values(by='环比', ascending=False)
    城市 环比 同比 定基
    c4 深圳 102.0 140.9 145.5
    c1 北京 101.5 120.7 121.4
    c3 广州 101.3 119.4 120.0
    c2 上海 101.2 127.3 127.8
    c5 沈阳 100.1 101.4 101.6
    # 多条件排序,先排序'环比',后排序'同比'
    >>> d.sort_values(by=['环比', '同比'], ascending=False)
    城市 环比 同比 定基
    c4 深圳 102.0 140.9 145.5
    c1 北京 101.5 120.7 121.4
    c3 广州 101.3 119.4 120.0
    c2 上海 101.2 127.3 127.8
    c5 沈阳 100.1 101.4 101.6
  • 对所有进行排序sort_index

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    >>> d.sort_index()
    城市 环比 同比 定基
    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.sort_index(ascending=False)
    城市 环比 同比 定基
    c5 沈阳 100.1 101.4 101.6
    c4 深圳 102.0 140.9 145.5
    c3 广州 101.3 119.4 120.0
    c2 上海 101.2 127.3 127.8
    c1 北京 101.5 120.7 121.4

逻辑运算与布尔索引

布尔索引

逻辑运算返回的是一组带索引的布尔值,例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
>>> d
城市 环比 同比 定基
c1 北京 101.5 120.7 121.4
c2 上海 101.2 127.3 127.8
c3 广州 101.3 119.4 120.0
c5 沈阳 100.1 101.4 101.6
# '环比' < 102
>>> d['环比'] < 102
c1 True
c2 True
c3 True
c4 False
c5 True
# '环比' < 102 且 '同比' < 120,注意优先级
>>> (d['环比'] < 102) & (d['同比'] < 120)
c1 False
c2 False
c3 True
c4 False
c5 True
dtype: bool

利用布尔值可以快速筛选出符合条件的数据

1
2
3
4
5
6
7
8
9
10
11
12
# 筛选出 '环比' < 102 的数据
>>> d[d['环比'] < 102]
城市 环比 同比 定基
c1 北京 101.5 120.7 121.4
c2 上海 101.2 127.3 127.8
c3 广州 101.3 119.4 120.0
c5 沈阳 100.1 101.4 101.6
# '环比' < 102 且 '同比' < 120 的数据
>>> d[(d['环比'] < 102) & (d['同比'] < 120)]
城市 环比 同比 定基
c3 广州 101.3 119.4 120.0
c5 沈阳 100.1 101.4 101.6

逻辑运算函数

  • query(expr)查询符合条件的数据

    • expr为查询的字符串

      1
      2
      3
      4
      >>> d.query('环比 < 102 & 同比 < 120')
      城市 环比 同比 定基
      c3 广州 101.3 119.4 120.0
      c5 沈阳 100.1 101.4 101.6
  • isin(values)查询一组数中是否存在某些值

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    >>> 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.isin([101.3, 101])
    城市 环比 同比 定基
    c1 False False False False
    c2 False False False False
    c3 False True False False
    c4 False False False False
    c5 False False False False

自定义运算

函数apply(func, axis=0)可以对数据进行自定义运算,运算方式取决去传入参数func,例如:

1
2
3
4
5
6
7
>>> d['定基'].apply(lambda x:x + 10)
c1 131.4
c2 137.8
c3 130.0
c4 155.5
c5 111.6
Name: 定基, dtype: float64

读写文件

pandas支持多种文件读写操作,详细见官方文档,以下为常用的

CSV

  • pandas.read_csv(filepath_or_buffer, sep=',', delimiter=None)
    • filepath_or_buffer:文件路径
    • usecols:指定要读取的columns
    • names:读取后设置columns字段值
  • DataFrame.to_csv(path_or_buf=None, columns=None, header=True, index=True, index_label=None, mode='w', encoding=None)
    • mode:读写模式
    • index:是否写index索引
    • header:是否写columns索引

hdf5

HDF5文件的读取和存储需要指定一个key,值为要存储的DataFrame

  • pandas.read_hdf(path_or_buf, key=None, **kwargs)
    • key:读取的键
    • mode:打开模式
  • DataFrame.to_hdf(path_or_buf, key, **kwargs)

json

  • pandas.read_json(path_or_buf=None, orient=None, typ='frame', lines=False)
    • orient:一般填"records"
    • lines:默认按行读取
  • DataFrame.to_json(path_or_buf=None, orient=None, typ='frame', lines=False)
打赏
  • 版权声明: 本博客所有文章除特别声明外,著作权归作者所有。转载请注明出处!
  • Copyrights © 2021 lzeroyuee
  • 访问人数: | 浏览次数:

请我喝杯咖啡吧~

支付宝
微信