pandas drop、loc和iloc函数对数据框进行操作
pandas.DataFrame.drop—从行或列中删除指定的标签
参考:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.drop.html
语法格式
DataFrame.drop(labels=None, *, axis=0, index=None, columns=None, level=None, inplace=False, errors='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符合前闭后开原则。