以列名(columns)和行名(index)作为参数,当只有一个参数时,默认是行名,即抽取整行数据,包括所有列。
以行和列位置索引(即:0,1,2,…)作为参数,0表示第一行,1表示第二行,以此类推。
当只有一个参数时,默认是行索引,即抽取整行数据,包括所有列。
import pandas as pd
pd.set_option('display.unicode.east_asian_width', True)
data = [[45, 65, 100], [56, 45, 50], [67, 67, 67]]
index = ['张三', '李四', '王五']
columns = ['数学', '语文', '英语']
df = pd.DataFrame(data=data, index=index, columns=columns)
print(df)
print('-------------------------')
# 提取单行数据
print(df.loc['张三']) # 行索引名称
print(df.iloc[0]) # 行索引编号
print('-------------------------')
# 提取多行数据
print(df.loc[['张三', '王五']])
print(df.iloc[[0, 2]])
print('-------------------------')
# 提取连续多行数据
print(df.loc['张三':'王五']) # 行索引名称,包含王五
print(df.iloc[0:2]) # 行索引编号,不包含王五
print('-------------------------')
# iloc[start:stop:step]
print(df.iloc[1::]) # 起始为1,一直到末尾
print(df.iloc[::2]) # 起始为0,步长为2
数学 语文 英语
张三 45 65 100
李四 56 45 50
王五 67 67 67
-------------------------
数学 45
语文 65
英语 100
Name: 张三, dtype: int64
数学 45
语文 65
英语 100
Name: 张三, dtype: int64
-------------------------
数学 语文 英语
张三 45 65 100
王五 67 67 67
数学 语文 英语
张三 45 65 100
王五 67 67 67
-------------------------
数学 语文 英语
张三 45 65 100
李四 56 45 50
王五 67 67 67
数学 语文 英语
张三 45 65 100
李四 56 45 50
-------------------------
数学 语文 英语
李四 56 45 50
王五 67 67 67
数学 语文 英语
张三 45 65 100
王五 67 67 67
import pandas as pd
pd.set_option('display.unicode.east_asian_width', True)
data = [[45, 65, 100], [56, 45, 50], [67, 67, 67]]
index = ['张三', '李四', '王五']
columns = ['数学', '语文', '英语']
df = pd.DataFrame(data=data, index=index, columns=columns)
print(df)
print('-------------------------')
# 直接使用列名提取
print(df[['数学', '英语']])
print('-------------------------')
# 提取不连续的列
# [行, 列]
# 提取:所有行的数学和英语
print(df.loc[:, ['数学', '英语']])
print(df.iloc[:, [0, 2]])
print('-------------------------')
# 提取连续的列
print(df.loc[:, '语文':])
print(df.iloc[:, 1:])
数学 语文 英语
张三 45 65 100
李四 56 45 50
王五 67 67 67
-------------------------
数学 英语
张三 45 100
李四 56 50
王五 67 67
-------------------------
数学 英语
张三 45 100
李四 56 50
王五 67 67
数学 英语
张三 45 100
李四 56 50
王五 67 67
-------------------------
语文 英语
张三 65 100
李四 45 50
王五 67 67
语文 英语
张三 65 100
李四 45 50
王五 67 67
import pandas as pd
pd.set_option('display.unicode.east_asian_width', True)
data = [[45, 65, 100], [56, 45, 50], [67, 67, 67]]
index = ['张三', '李四', '王五']
columns = ['数学', '语文', '英语']
df = pd.DataFrame(data=data, index=index, columns=columns)
print(df)
print('-------------------------')
print(df.loc['张三', '数学'], type(df.loc['张三', '数学']))
print(df.iloc[0, 0], type(df.iloc[0, 0]))
print('-------------------------')
print(df.loc[['张三', '王五'], ['数学', '语文']])
print(df.iloc[[0, 2], [0, 2]])
print('-------------------------')
# 区域数据连续
# [行切片, 列切片]
print(df.loc['张三':'李四', '数学':'语文'])
print(df.iloc[0:2, 0:2])
print('-------------------------')
# 区域数据不连续
print(df.iloc[[0, 2], [0, 2]]) # 第0行,第2行;第0列,第2列
print('-------------------------')
print(df.iloc[:, 0]) # 所有行的第0列
数学 语文 英语
张三 45 65 100
李四 56 45 50
王五 67 67 67
-------------------------
45 <class 'numpy.int64'>
45 <class 'numpy.int64'>
-------------------------
数学 语文
张三 45 65
王五 67 67
数学 英语
张三 45 100
王五 67 67
-------------------------
数学 语文
张三 45 65
李四 56 45
数学 语文
张三 45 65
李四 56 45
-------------------------
数学 英语
张三 45 100
王五 67 67
-------------------------
张三 45
李四 56
王五 67
Name: 数学, dtype: int64
import pandas as pd
pd.set_option('display.unicode.east_asian_width', True)
data = [[45, 65, 100], [56, 45, 50], [67, 67, 67]]
index = ['张三', '李四', '王五']
columns = ['数学', '语文', '英语']
df = pd.DataFrame(data=data, index=index, columns=columns)
print(df)
print('-------------------------')
# 语文 >= 60
print(df.loc[df['语文'] >= 60])
print('-------------------------')
# 语文 >= 60 数学 >= 60
# 多个关系使用关系运算符
print(df.loc[(df['语文'] >= 60) & (df['数学'] >= 60)])
数学 语文 英语
张三 45 65 100
李四 56 45 50
王五 67 67 67
-------------------------
数学 语文 英语
张三 45 65 100
王五 67 67 67
-------------------------
数学 语文 英语
王五 67 67 67