python读取序列5之后的数据_python综合学习五之Pandas

这一节,主要深入学习Pandas的用法。

一、筛选

先建立一个 6X4 的矩阵数据。

dates = pd.date_range('20180830', periods=6)

df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates, columns=['A','B','C','D'])

print(df)

打印:

A B C D

2018-08-30 0 1 2 3

2018-08-31 4 5 6 7

2018-09-01 8 9 10 11

2018-09-02 12 13 14 15

2018-09-03 16 17 18 19

2018-09-04 20 21 22 23

简单的筛选

如果我们想选取 DataFrame 中的数据,下面描述了两种途径, 他们都能达到同一个目的:

print(df['A'])

print(df.A)

"""

2018-08-30 0

2018-08-31 4

2018-09-01 8

2018-09-02 12

2018-09-03 16

2018-09-04 20

Freq: D, Name: A, dtype: int64

"""

让选择跨越多行或多列:

print(df[0:3])

"""

A B C D

2018-08-30 0 1 2 3

2018-08-31 4 5 6 7

2018-09-01 8 9 10 11

"""

print(df['20180830':'20180901'])

"""

A B C D

2018-08-30 0 1 2 3

2018-08-31 4 5 6 7

2018-09-01 8 9 10 11

"""

如果df[3:3]将会是一个空对象。后者选择20180830到20180901标签之间的数据,并且包括这两个标签。

根据标签loc

同样我们可以使用标签来选择数据 loc, 本例子主要通过标签名字选择某一行数据, 或者通过选择某行或者所有行(:代表所有行)然后选其中某一列或几列数据。:

print(df.loc['20130102'])

"""

A 4

B 5

C 6

D 7

Name: 2013-01-02 00:00:00, dtype: int64

"""

print(df.loc[:,['A','B']])

"""

A B

2013-01-01 0 1

2013-01-02 4 5

2013-01-03 8 9

2013-01-04 12 13

2013-01-05 16 17

2013-01-06 20 21

"""

print(df.loc['20130102',['A','B']])

"""

A 4

B 5

Name: 2013-01-02 00:00:00, dtype: int64

"""

根据序列iloc

另外我们可以采用位置进行选择 iloc, 在这里我们可以通过位置选择在不同情况下所需要的数据例如选某一个,连续选或者跨行选等操作。

print(df.iloc[3,1])

# 13

print(df.iloc[3:5,1:3])

"""

B C

2013-01-04 13 14

2013-01-05 17 18

"""

print(df.iloc[[1,3,5],1:3])

"""

B C

2013-01-02 5 6

2013-01-04 13 14

2013-01-06 21 22

"""

在这里我们可以通过位置选择在不同情况下所需要的数据, 例如选某一个,连续选或者跨行选等操作。

根据混合的这两种 ix

当然我们可以采用混合选择 ix, 其中选择’A’和’C’的两列,并选择前三行的数据。

print(df.ix[:3,['A','C']])

"""

A C

2013-01-01 0 2

2013-01-02 4 6

2013-01-03 8 10

"""

二、设置值

我们可以根据自己的需求, 用 pandas 进行更改数据里面的值, 或者加上一些空的,或者有数值的列.

首先建立了一个 6X4 的矩阵数据。

# -*- coding:utf-8 -*-

"""

@author: Corwien

@file: pd_value.py

@time: 18/8/31 00:59

"""

import pandas as pd

import numpy as np

dates = pd.date_range('20180101', periods=6)

df = pd.DataFrame(np.arange(24).reshape((6,4)),index=dates, columns=['A','B','C','D'])

print(df)

"""

A B C D

2018-01-01 0 1 2 3

2018-01-02 4 5 6 7

2018-01-03 8 9 10 11

2018-01-04 12 13 14 15

2018-01-05 16 17 18 19

2018-01-06 20 21 22 23

"""

根据位置设置loc和iloc

我们可以利用索引或者标签确定需要修改值的位置。

df.iloc[2,3] = 1111

df.loc['20180103', 'B'] = 2222

print(df)

打印:

A B C D

2018-01-01 0 1 2 3

2018-01-02 4 5 6 7

2018-01-03 8 2222 10 1111

2018-01-04 12 13 14 15

2018-01-05 16 17 18 19

2018-01-06 20 21 22 23

根据条件设置

如果现在的判断条件是这样, 我们想要更改B中的数, 而更改的位置是取决于 A 的. 对于A大于4的位置. 更改B在相应位置上的数为0.

df.B[df.A>4] = 0

print(df)

原数据:

A B C D

2018-01-01 0 1 2 3

2018-01-02 4 5 6 7

2018-01-03 8 2222 10 1111

2018-01-04 12 13 14 15

2018-01-05 16 17 18 19

2018-01-06 20 21 22 23

df.B[df.A>4] = 0更改后的数据:

A B C D

2018-01-01 0 1 2 3

2018-01-02 4 5 6 7

2018-01-03 8 0 10 1111

2018-01-04 12 0 14 15

2018-01-05 16 0 18 19

2018-01-06 20 0 22 23

按行或列设置

如果对整列做批处理, 加上一列 ‘F’, 并将 F 列全改为 NaN, 如下:

df['F'] = np.nan

"""

A B C D F

2018-01-01 0 1 2 3 NaN

2018-01-02 4 5 6 7 NaN

2018-01-03 8 0 10 1111 NaN

2018-01-04 12 0 14 15 NaN

2018-01-05 16 0 18 19 NaN

2018-01-06

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值