(四)pandas数据抽取(提取)

DataFrame对象的loc属性与iloc属性

  • loc属性

    • 以列名(columns)和行名(index)作为参数, 当只有一个参数时,默认是行名,即抽取整 行数据,包括所有列。

  • iloc属性

    • 以行和列位置索引(即:0,1,2,...)作为参数, 0表示第一行,1表示第2行,以此类推。当 只有一个参数时,默认是行索引,即抽取整 行数据,包括所有列。

行提取

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)
'''
      数学  语文  英语
张三    45    65   100
李四    56    45    50
王五    67    67    67
'''
print('--------------------------')

# 提取行数据
print(df.loc['张三'])  # 行索引名称
print(df.iloc[0])  # 行索引的编号
'''
数学     45
语文     65
英语    100
Name: 张三, dtype: int64
'''

print('------提取多行数据------(谁和谁)---')  #张三和王五
print(df.loc[['张三','王五']])
print(df.iloc[[0,2]])
'''
      数学  语文  英语
张三    45    65   100
王五    67    67    67
'''

print('--------提取连续的多行数据(从谁到谁)-----------------') # 从张三到王五
print(df.loc['张三':'王五'])   # 行索引名称, 包含王五
'''
      数学  语文  英语
张三    45    65   100
李四    56    45    50
王五    67    67    67
'''
print('----------------------------------------')
print(df.iloc[0:2]) # 行索引序号,含0 不含2
'''
      数学  语文  英语
张三    45    65   100
李四    56    45    50
'''
print('---------------------------------')
print(df.iloc[1::]) # iloc[start:stop:step]
'''
      数学  语文  英语
李四    56    45    50
王五    67    67    67
'''
print('---------------------------------')
print(df.iloc[::2]) # iloc[start:stop:step]  步长为2  从0,1,2   取出0,2
'''
      数学  语文  英语
张三    45    65   100
王五    67    67    67
'''

需要注意的是,用loc进行切片操作时,是会取到end的值的,而iloc不会。

前面也提到过,用标签索引切片包含end值,用序号索引切片不包含end值。

列提取

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('------------------------------')
print(df.iloc[:,[0,2]])
'''
      数学  英语
张三    45   100
李四    56    50
王五    67    67
'''
print('--------------提取连续的列-------------------')
print(df.loc[:,'语文':])
print('------------------------------')
print(df.iloc[:,1:])
'''
      语文  英语
张三    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(df.loc['张三','数学'],type(df.loc['张三','数学']))
print(df.iloc[0,0]) # 第0 行,第0列
'''
45 <class 'numpy.int64'>
'''
print('------------------------------')

print(df.loc[['张三','王五'],['数学','语文']])
print(df.iloc[[0,2],[0,2]]) # 第0行和第2行,第0列和第2列
'''
      数学  语文
张三    45    65
王五    67    67
'''
print(df.iloc[0:2,0:2]) # ,的左侧行切片,右侧列切片  ,提取的区域数据为连续的数据
'''
      数学  语文
张三    45    65
李四    56    45
'''

print('----------------------------------') # 提取所有行的第0列
print(df.iloc[:,0])
'''
张三    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(df.loc[df['语文']>=60]) # 提取语文成绩大于等于60的学生信息
'''
      数学  语文  英语
张三    45    65   100
王五    67    67    67
'''
# 多个条件之间使用关系运算符
print(df.loc[(df['语文']>=60) & (df['数学']>=60)])
# 王五    67    67    67

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值