pandas drop、loc和iloc函数对数据框进行操作

发布时间 2023-05-03 21:20:04作者: yayagogogo

pandas.DataFrame.drop—从行或列中删除指定的标签

参考:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop.html

语法格式

DataFrame.drop(labels=None*axis=0index=Nonecolumns=Nonelevel=Noneinplace=Falseerrors='raise')

参数解释:

  • labels: 要删除的index或列标签。
  • axis: 0 或'index',表示行;1或'columns',表示列; 默认为0。
  • index: 要删除的行标签。
  • columns:要删除的列标签。

代码示例

import pandas as pd

# 利用列表创建DataFrame
data = [[3,"negative",2,3],[4,"negative",6,7],[11,"positive",0,1],[12,"positive",2,4]]
df1 = pd.DataFrame(data, columns=["xuhao","result","value1","value2"])
print(df1)
#    xuhao    result  value1  value2
# 0      3  negative       2       3
# 1      4  negative       6       7
# 2     11  positive       0       1
# 3     12  positive       2       4

# 删除标签"xuhao"和"value2"列
print(df1.drop(["xuhao","value2"],axis=1)) #等价于print(df1.drop(columns=["xuhao","value2"]))
#      result  value1
# 0  negative      2
# 1  negative      6
# 2  positive      0
# 3  positive      2

# 同时删除标签"xuhao"和"value2"列、index为0和2的行
print(df1.drop(index=[0,2],columns=["xuhao","value2"]))
#      result  value1
# 1  negative       6
# 3  positive       2

pandas.DataFrame.loc—通过标签或布尔数组访问一组行和列

import pandas as pd

#利用列表创建DataFrame
data = [[3,"negative",2,3],[4,"negative",6,7],[11,"positive",0,1],[12,"positive",2,4]]
df2 = pd.DataFrame(data, columns=["xuhao","result","value1","value2"],index=["a","b","c","d"])
print(df2)
#    xuhao    result  value1  value2
# a      3  negative       2       3
# b      4  negative       6       7
# c     11  positive       0       1
# d     12  positive       2       4

# 返回标签"b"行的Series形式,此时[]中仅能输入单独的标签
print(df2.loc["b"]) # 若想要返回某一列的Series形式,则输入print(df2.loc[:,"value1"])
# xuhao            4
# result    negative
# value1           6
# value2           7
# Name: b, dtype: object

#使用行标签和列标签的列表返回子数据框
print(df2.loc[["a","c"],["value1","value2"]]) # print(df2.loc[["a","c"]])表示返回"a"和"c"行
#    value1  value2
# a       2       3
# c       0       1

#使用切片输入行标签返回子数据框,包括了"a"和"c"行
print(df2.loc["a":"c",["xuhao","result","value1"]]) 
#    xuhao    result  value1
# a      3  negative       2
# b      4  negative       6
# c     11  positive       0

#利用布尔值返回特定行和列组成的子数据框
print(df2.loc[[True,False,False,True],[True,False,False,True]]) 
#    xuhao  value2
# a      3       3
# d     12       4

pandas.DataFrame.iloc—根据轴的整数位置或布尔值获取一组行和列

 

import pandas as pd

#利用列表创建DataFrame
data = [[3,"negative",2,3],[4,"negative",6,7],[11,"positive",0,1],[12,"positive",2,4]]
df2 = pd.DataFrame(data, columns=["xuhao","result","value1","value2"],index=["a","b","c","d"])
print(df2)
#    xuhao    result  value1  value2
# a      3  negative       2       3
# b      4  negative       6       7
# c     11  positive       0       1
# d     12  positive       2       4

# 返回位置为2的行的Series形式,此时[]中仅能输入单独且为整数的index位置
print(df2.iloc[1]) # 若想要返回某一列的Series形式,则输入print(df2.iloc[:,2])
# xuhao            4
# result    negative
# value1           6
# value2           7
# Name: b, dtype: object

#使用行和列的位置列表返回子数据框
print(df2.iloc[[0,2],[2,3]]) 
#    value1  value2
# a       2       3
# c       0       1

#使用切片输入行的位置返回子数据框,不包括"c"行
print(df2.iloc[0:2]) 
#    xuhao    result  value1  value2
# a      3  negative       2       3
# b      4  negative       6       7
#利用布尔值返回特定行和列组成的子数据框
print(df2.iloc[[True,False,False,True],[True,False,False,True]]) 
#    xuhao  value2
# a      3       3
# d     12       4

总结

pandas库中的drop、loc和iloc函数均有提取数据框中子数据集的作用;

loc和iloc函数用法类似,前者是根据行标签或列标签来定位,而后者则是通过行标签或列标签所在位置来定位。另外,在使用切片提取时,loc是前闭后闭原则,而iloc符合前闭后开原则。