简单的刷选
import pandas as pd
import numpy as np
dates = pd.date_range('20130101', periods=6)
df = pd.DataFrame(np.arange(24).reshape((6, 4)), index=dates, columns=['A', 'B', 'C', 'D'])
print(df)
'''
A B C D
2013-01-01 0 1 2 3
2013-01-02 4 5 6 7
2013-01-03 8 9 10 11
2013-01-04 12 13 14 15
2013-01-05 16 17 18 19
2013-01-06 20 21 22 23
'''
print(df.A) #选取指定数据
# print(df['A'])
'''
2013-01-01 0
2013-01-02 4
2013-01-03 8
2013-01-04 12
2013-01-05 16
2013-01-06 20
Freq: D, Name: A, dtype: int32
'''
print(df[0:3]) #选择跨越多行多列
'''
A B C D
2013-01-01 0 1 2 3
2013-01-02 4 5 6 7
2013-01-03 8 9 10 11
'''
print(df['20130102':'20130103'])
'''
A B C D
2013-01-02 4 5 6 7
2013-01-03 8 9 10 11
'''
- 根据标签 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:
也可以采用位置进行选择,实现连续选或者跨行选。
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:
print(df.ix[:3,['A','C']]) #选择’A’和’C’的两列,并选择前三行的数据。
"""
A C
2013-01-01 0 2
2013-01-02 4 6
2013-01-03 8 10
"""
通过判断的筛选
我们可以采用判断指令 (Boolean indexing) 进行选择,约束某项条件然后选择出当前所有数据。
print(df[df.A>8])
"""
A B C D
2013-01-04 12 13 14 15
2013-01-05 16 17 18 19
2013-01-06 20 21 22 23
"""
设置值
-
我们可以根据实际需求,设置数据为空或者其他值。可以利用索引或者标签确定需要修改值的位置。
df.iloc[2,2] = 1111
df.loc['20130101','B'] = 2222
"""
A B C D
2013-01-01 0 2222 2 3
2013-01-02 4 5 6 7
2013-01-03 8 9 1111 11
2013-01-04 12 13 14 15
2013-01-05 16 17 18 19
2013-01-06 20 21 22 23
"""
- 如果现在的判断条件是这样, 我们想要更改
B
中的数, 而更改的位置是取决于A
的. 对于A
大于4的位置. 更改B
在相应位置上的数为0.
df.B[df.A>4] = 0
"""
A B C D
2013-01-01 0 2222 2 3
2013-01-02 4 5 6 7
2013-01-03 8 0 1111 11
2013-01-04 12 0 14 15
2013-01-05 16 0 18 19
2013-01-06 20 0 22 23
"""
- 按行或列设置
如果对整列做批处理, 加上一列 ‘F’, 并将 F
列全改为 NaN
, 如下:
df['F'] = np.nan
"""
A B C D F
2013-01-01 0 2222 2 3 NaN
2013-01-02 4 5 6 7 NaN
2013-01-03 8 0 1111 11 NaN
2013-01-04 12 0 14 15 NaN
2013-01-05 16 0 18 19 NaN
2013-01-06 20 0 22 23 NaN
"""
- 添加数据
df['E'] = pd.Series([1,2,3,4,5,6], index=pd.date_range('20130101',periods=6))
"""
A B C D F E
2013-01-01 0 2222 2 3 NaN 1
2013-01-02 4 5 6 7 NaN 2
2013-01-03 8 0 1111 11 NaN 3
2013-01-04 12 0 14 15 NaN 4
2013-01-05 16 0 18 19 NaN 5
2013-01-06 20 0 22 23 NaN 6
"""
上述内容相对还是比较好理解的,当然只是学习了一些基本的操作,在之后实战训练时还需根据实际情况来选择合适的方法。