Pandas iloc/loc/ix
a | b | c | d | |
0 | 11 | aa | 9 | 1 |
1 | 22 | bb | 8 | 2 |
2 | 33 | cc | 7 | 3 |
3 | 44 | dd | 6 | 4 |
一、iloc -- 通过行/列号选取数据 [左闭, 右开)
第0行
df.iloc[0]
多行
df.iloc[0:2]
选取某列
df.iloc[:, [1]]
选取第第0行一直到第2行(0:3)与第0列和第2列[0, 2]的交叉元素
df.iloc[0:3, [0,2]]
二、loc -- 通过标签来选择
选择多列 [左闭,右闭]
df.loc[:, 'a':'c']
a | b | c | |
0 | 11 | aa | 9 |
1 | 22 | bb | 8 |
2 | 33 | cc | 7 |
3 | 44 | dd | 6 |
三、ix -- 兼具iloc和loc的特点
既可以像iloc一样通过行号选择
df.ix[1]
也可以像loc一样选取标签
df.ix[:, 'a']
不过好像ix在最近的pandas中被弃用,故不再深究其用法。
四、按照条件选取数据
选取a列中元素为11的行以及d列中元素为4的行
df.loc[(df['a']==11) | (df['d']==4)]
选取满足条件的列
# 第0行元素为11的列索引,第3行元素为44的列索引
cols_ini = [(df[0:1].values.tolist()[0].index(11)), (df[3:].values.tolist()[0].index(44))] # 去掉上述索引的重复值
cols = list(set(cols_ini)) # 输出结果 dataframe
df.iloc[:, cols]
矩阵转置
import pandas as pd df2 = pd.DataFrame(df.values.T, index=df.columns, columns=df.index)