废话不多说,直接上代码
import pandas as pd
if __name__ == "__main__":
data = [["lucy", "female", 17], ["lilei", "male", 18],["hanmeimei", "female", 17],["lily", "female", 16]]
index = ['a', 'b','c','d']
columns = ['name', 'sex', 'age']
df = pd.DataFrame(data=data, index=index, columns=columns)
print("*" * 10,"获取所有数据","*" * 10)
print(df.loc[:])
print("*" * 10,"获取第一行数据","*" * 10)
print(df.loc["a",:])
print("*" * 10,"获取第一行,第二列数据","*" * 10)
print(df.loc["a","sex"])
print("*" * 10,"获取前两行,前两列数据","*" * 10)
print(df.loc[:"b",:"sex"])
print("*" * 10,"获取第一、三行,第一、三列列数据","*" * 10)
print(df.loc[['a','c'],['name','age']])
# print(df.loc[1,2]) #报错:KeyError:
print("*" * 20, "iloc", "*" * 20)
print("*" * 10, "获取所有数据", "*" * 10)
print(df.iloc[:])
print("*" * 10, "获取第一行数据", "*" * 10)
print(df.iloc[0, :])
print("*" * 10, "获取第一行,第二列数据", "*" * 10)
print(df.iloc[0, 2])
print("*" * 10, "获取前两行,前两列数据", "*" * 10)
print(df.iloc[:2, :2])
print("*" * 10, "获取第一、三行,第一、三列列数据", "*" * 10)
print(df.iloc[[0, 2], [0, 2]])
# print(df.iloc["a", "sex"]) #ValueError: Location based indexing can only have [integer, integer slice
print("*" * 20, "at", "*" * 20)
print("*" * 10, "获取第一行、第一列数据", "*" * 10)
print(df.at["a","name"])
# print(df.at["a":"c","name":]) #TypeError: unhashable type: 'slice'
# print(df.at[1, 2]) #KeyError: 2
print("*" * 20, "iat", "*" * 20)
print("*" * 10, "获取第一行、第一列数据", "*" * 10)
print(df.iat[0, 0])
print("*" * 10, "==", "*" * 10)
# print(df.iat[0:2, 0]) #ValueError: iAt based indexing can only have integer indexers
# print(df.iat["a", "sex"]) #ValueError: iAt based indexing can only have integer indexers
# df.ix["a":"c","name":"age"] #AttributeError: 'DataFrame' object has no attribute 'ix'
输出:
********** 获取所有数据 **********
name sex age
a lucy female 17
b lilei male 18
c hanmeimei female 17
d lily female 16
********** 获取第一行数据 **********
name lucy
sex female
age 17
Name: a, dtype: object
********** 获取第一行,第二列数据 **********
female
********** 获取前两行,前两列数据 **********
name sex
a lucy female
b lilei male
********** 获取第一、三行,第一、三列列数据 **********
name age
a lucy 17
c hanmeimei 17
******************** iloc ********************
********** 获取所有数据 **********
name sex age
a lucy female 17
b lilei male 18
c hanmeimei female 17
d lily female 16
********** 获取第一行数据 **********
name lucy
sex female
age 17
Name: a, dtype: object
********** 获取第一行,第二列数据 **********
17
********** 获取前两行,前两列数据 **********
name sex
a lucy female
b lilei male
********** 获取第一、三行,第一、三列列数据 **********
name age
a lucy 17
c hanmeimei 17
******************** at ********************
********** 获取第一行、第一列数据 **********
lucy
******************** iat ********************
********** 获取第一行、第一列数据 **********
lucy
********** == **********
综上可以总结出它们的区别:
- loc:只能通过行索引和列索引名称获取单行单列,或者多行多列数据;
- iloc:只能通过行序号和列序号获取单行单列,或者多行多列数据;
- at:只能通过行索引和列索引名称获取单行单列数据,不能获取多行多列数据;
- iat:只能通过行序号和列序号获取单行单列数据,不能获取多行、多列数据;
- ix:从pandas 0.20.0版开始,ix已被彻底移除;