前言
导包
import pandas as pd
import numpy as np
1.0 dataframe 数据
创建一个字典
new_dict = {
'A':1,
'B':[1,2,3,4],
'C':'asd123',
'D':np.arange(4),
'E':pd.Series(1,index=range(4))
}
把索引修改为abcd
df1 = pd.DataFrame(new_dict,index=list('abcd'))
输出df1
df1
单独查看列B
df1['B']
a 1
b 2
c 3
d 4
Name: B, dtype: int64
当然我们也可以查看a列df1[‘a’]
df 数据可以通过列索引取值(1)df1’列名’df1.列名 取出的数据是series对象
df1.B.values
array([1, 2, 3, 4], dtype=int64)
查看B列c行
df1.B.c
3
2.0 series对象取值
建立一个series对象
ser1 =
pd.Series(range(10,15),index=list('ABCDE'))
ser1
A 10
B 11
C 12
D 13
E 14
dtype: int64
ser2 = pd.Series(range(10,15),index=range(1,6))
ser2
1 10
2 11
3 12
4 13
5 14
dtype: int64
2.1 通过行索引取值
ser1['A']
10
ser1.A
10
# ser2['2']
# ser2.2
ser2[1]
ser2[2]
11
总结:series的行索引,如果不是数字,存在索引和下标的区别
如果是数字,不存在下标的概念,默认就是索引
2.2 切片
print(ser1)
print('-'*50)
print(ser2)
如果是索引,切片则包含结束位置
ser1['A':'C']
A 10
B 11
C 12
dtype: int64
如果是下标取值,则符合左闭右开格式,不包含结束位置
ser1[0:3]
A 10
B 11
C 12
dtype: int64
单独提取A和C的索引
ser1[['A','C']]
或者
ser1[[0,2]]
A 10
C 12
dtype: int64
筛选出大于13的行索引
ser1[ser1>13]
E 14
dtype: int64
筛选出大于10且为偶数的行索引
ser1[(ser1>10)&(ser1%2==0)]
C 12
E 14
dtype: int64
我们把上文创建的dataframe数据使用一下
df1
单独输出A列索引
df1.A
a 1
b 1
c 1
d 1
Name: A, dtype: int64
返回视图对象
df1.A.values
array([1, 1, 1, 1], dtype=int64)
取单个对象(如C行c列)
df1['C']['c']
‘asd123’
取不连续多列
df1[['A','C','E']]
取不连续多列
df1[['A','C','E']]
我们尝试下取连续多列
df1['A':'C']
由此得出默认不支持取连续多列
我们来尝试取一行数据
df1['a':'a']
那我们取连续多行
df1['a':'c']
由此得出默认不支持取不连续多行
2.3 高级索引
2.3.1 标签索引
先把df1和series对象拿下来进行尝试
df1
ser1
A 10
B 11
C 12
D 13
E 14
dtype: int64
进行切片
ser1.loc['A':'C']
A 10
B 11
C 12
dtype: int64
ser1.loc[['A','C','D']]
A 10
C 12
D 13
dtype: int64
我们将df1取单行
df1.loc['a']
A 1
B 1
C asd123
D 0
E NaN
Name: a, dtype: object
取单列(先行后列)
df1.loc[:,'A']
a 1
b 1
c 1
d 1
Name: A, dtype: int64
定向索引
df1.loc['d','D']
3
a到c的行索引和列索引
df1.loc['a':'c',:]
a.c.d的行索引
尝试一下列索引
df1.loc[:,['A','C','D']]
取B列大于2的
df1.loc[df1['B']>2]
总结:loc标签索引符合总结规律[行索引,列索引]
2.3.2 位置索引
我们还是把dataframe拿下来使用
df1
行索引
df1.iloc[0:2]
列索引
df1.iloc[:,0:3]
3.0 删除drop
我们把series拿下来使用
ser1
A 10
B 11
C 12
D 13
E 14
dtype: int64
把E给删了
ser1.drop('E')
A 10
B 11
C 12
D 13
dtype: int64
我们尝试看下对原series对象有没有影响
ser1
A 10
B 11
C 12
D 13
E 14
dtype: int64
implace 如果设置为true,那么删除并且替换原始数据,如果默认,则返回一个删除之后的新数据,不影响原始内容
我们来批量删除一下
ser1.drop(['B','C','D'])
A 10
E 14
dtype: int64