pandas dataframe 筛选数据

Pandas DataFrame 是一个表格,我们可以对DataFrame的列数据或者行数据进行筛选

选取 DataFrame 的列

选取单列

column = df["column_name"]

column = df.loc[:,"column_name"]

column = df.loc[:,["column_name"]]

column = df.iloc[:,column_index]

column = df.iloc[:,[column_index]]

选取多列

columns = df[["column1","column2"]]

columns = df.loc[:,["column1","column2"]]

columns = df.iloc[:,[column_start_index:column_end_index]]

选取 DataFrame 的行

选取单行数据

# 用切片的方式选取第1行数据
row = df[0:1]

row = df.loc["row_name",:]

row = df.loc[["row_name"],:]

row = df.iloc[row_index,:]

row = df.iloc[[row_index],:]

选取多行数据

row = df[row_start_index:row_end_index]

row = df.loc["row_name1":"row_name2",:]

row = df.loc[["row_name1","row_name2"],:]

row = df.iloc[row_start_index:row_end_index,:]

row = df.iloc[[row_start_index,row_end_index],:]

loc 方法

基于行标签和列标签(x_label、y_label)进行索引

import pandas as pd
import numpy as np
df = pd.DataFrame(np.random.rand(4,4),index=list('abcd'),columns=list('ABCD'))
A B C D
a 0.437566 0.297916 0.112590 0.344499
b 0.452666 0.877309 0.558246 0.293236
c 0.871981 0.405403 0.985072 0.095807
d 0.437388 0.091123 0.247424 0.478886

选取所有行,所有列

.loc[x,y] 第一个参数是行名 : 代表所有行,第二个参数是列名 : 可以代表所有列

print(df.loc[:,:])
          A         B         C         D
a  0.270384  0.177939  0.922407  0.582625
b  0.505246  0.726506  0.915992  0.447659
c  0.545251  0.684161  0.227306  0.781615
d  0.706013  0.630996  0.878100  0.495289

选择指定行

选取 index 为 a 的行

print(df.loc['a',:])

A    0.270384
B    0.177939
C    0.922407
D    0.582625
Name: a, dtype: float64

print(df.loc[['a'],:])
          A         B         C         D
a  0.270384  0.177939  0.922407  0.582625

选取 index ac 的行

print(df.loc['a':'c',:])
          A         B         C         D
a  0.270384  0.177939  0.922407  0.582625
b  0.505246  0.726506  0.915992  0.447659
c  0.545251  0.684161  0.227306  0.781615

选取 index 为 ac 的行

print(df.loc[['a','c'],:])
          A         B         C         D
a  0.270384  0.177939  0.922407  0.582625
c  0.545251  0.684161  0.227306  0.781615

选取指定列

选取列名为 A 的列

print(df.loc[:,'A'])
a    0.270384
b    0.505246
c    0.545251
d    0.706013
Name: A, dtype: float64

选取列名AC 的列

print(df.loc[:,'A':'C'])
          A         B         C
a  0.270384  0.177939  0.922407
b  0.505246  0.726506  0.915992
c  0.545251  0.684161  0.227306
d  0.706013  0.630996  0.878100

选取列名为 A 和列名为 C 的列

print(df.loc[:,['A','C']])
          A         C
a  0.270384  0.922407
b  0.505246  0.915992
c  0.545251  0.227306
d  0.706013  0.878100

iloc 方法

基于行索引和列索引(index,columns)都是从 0 开始,使用iloc方法你不必知道行索引名称和列名,只需要传入行或列的位置参数即可

选择所有行和列

print(df.iloc[:,:])
          A         B         C         D
a  0.270384  0.177939  0.922407  0.582625
b  0.505246  0.726506  0.915992  0.447659
c  0.545251  0.684161  0.227306  0.781615
d  0.706013  0.630996  0.878100  0.495289

选取指定行

选取第一行数据

print(df.iloc[0,:])
A    0.270384
B    0.177939
C    0.922407
D    0.582625
Name: a, dtype: float64

选取前3行数据

print(df.iloc[0:3,:])
          A         B         C         D
a  0.270384  0.177939  0.922407  0.582625
b  0.505246  0.726506  0.915992  0.447659
c  0.545251  0.684161  0.227306  0.781615

选取第一行和最后一行的数据

print(df.iloc[[0,-1],:])
          A         B         C         D
a  0.270384  0.177939  0.922407  0.582625
d  0.706013  0.630996  0.878100  0.495289

选取指定列

选取第一列数据

print(df.iloc[:,0])
a    0.270384
b    0.505246
c    0.545251
d    0.706013
Name: A, dtype: float64

选取前三列数据

print(df.iloc[:,0:3])
          A         B         C
a  0.270384  0.177939  0.922407
b  0.505246  0.726506  0.915992
c  0.545251  0.684161  0.227306
d  0.706013  0.630996  0.878100

选取第一列和最后一列数据

print(df.iloc[:,[0,-1]])
          A         D
a  0.270384  0.582625
b  0.505246  0.447659
c  0.545251  0.781615
d  0.706013  0.495289

ix

基于标签或者索引(loc和iloc 的混合)

官方文档新的python版本已经弃用 ix,建议使用 loc 和 iloc

.ix is deprecated. Please use
.loc for label based indexing or
.iloc for positional indexing

原文地址:https://www.cnblogs.com/Jaryer/p/15151425.html