dataframe对象获取切片的常用方法有两种,一种是通过索引名和列名,即使用.loc ,另外一种是使用行号和列号,即使用.iloc 。
例如下述dataframe;
import pandas as pd
import numpy as np
data=np.around(np.random.randn(3,4),decimals=2)
data = pd.DataFrame(data,columns=('A','B','C','D'))
print(data)
运行结果为:
A B C D
0 1.23 -2.10 -0.14 1.73
1 -0.51 0.91 -0.19 0.48
2 1.15 -0.27 0.29 0.89
当我们通过loc 和 .iloc 取出一行时,数据的类型为 Series !
print(data.loc[0,['A','B']])
print(data.iloc[0,0:2])
运行结果相同
A 0.17
B 0.79
Name: 0, dtype: float64
此时,原来的columns 变成了现在的index!
print(data.loc[0,['A','B']].index)
print(data.columns)
运行结果:
Index(['A', 'B'], dtype='object')
Index(['A', 'B', 'C', 'D'], dtype='object')
因此要注意切片引用时由于数据类型变化所导致的不同,以防止不必要的错误!
为了避免不必要的错误,可以使用逻辑索引切片,这时不会发生数据类型的转变!
print(data[data.index==0][['A','B']])
运行结果:
A B
0 0.32 -1.15
可以使用isinstance(var, pd.DataFrame)或者isinstance(var, pd.Series) 来进行数类型的判别!