一、df.loc的基本用法
在Pandas中,使用df.loc来访问某个DataFrame中的行和列的数据。其基本语法为:df.loc[row_indexer, column_indexer]。其中,row_indexer可以是一个单独的标签,也可以是一组标签;column_indexer可以是一个单独的标签,也可以是一组标签。如果不指定row_indexer,则会返回所有行的数据;如果不指定column_indexer,则会返回所有列的数据。
import pandas as pd import numpy as np data = {'name': ['Tom', 'Jerry', 'Spike', 'Tyke'], 'age': [10, 12, 3, 1], 'gender': ['M', 'M', 'M', 'M'], 'score': [85, 90, 78, 92]} df = pd.DataFrame(data) print(df.loc[1:3, 'age':'score'])
上面的代码中,我们创建了一个DataFrame,并使用df.loc访问其中的行和列数据。具体来说,我们指定了row_indexer为1:3,column_indexer为’age’:’score’,这样就返回了第2行到第4行([1:3]的含义),以及’age’到’score’列的数据。结果为:
age gender score 1 12 M 90 2 3 M 78 3 1 M 92
二、df.loc的高级用法
除了基本用法外,df.loc还支持一些高级用法,可以更加灵活地访问DataFrame中的数据。
1. 使用布尔条件访问数据
可以使用一些布尔条件来访问DataFrame中的数据。具体来说,可以创建一组布尔条件,然后使用这组条件来筛选出符合条件的行或列。代码示例如下:
import pandas as pd import numpy as np data = {'name': ['Tom', 'Jerry', 'Spike', 'Tyke'], 'age': [10, 12, 3, 1], 'gender': ['M', 'M', 'M', 'M'], 'score': [85, 90, 78, 92]} df = pd.DataFrame(data) bool_indexer = [False, True, True, False] print(df.loc[bool_indexer, :])
上面的代码中,我们创建了一个DataFrame,并使用bool_indexer来指定需要访问的行(这里我们只访问第2行和第3行)。由于我们没有指定column_indexer,因此返回了所有列的数据。结果为:
name age gender score 1 Jerry 12 M 90 2 Spike 3 M 78
2. 使用函数访问数据
还可以使用一些函数来访问DataFrame中的数据。比如,可以使用apply函数对某一列的数据进行处理,然后返回一个新的Series,再使用df.loc访问所需的行或列。代码示例如下:
import pandas as pd import numpy as np data = {'name': ['Tom', 'Jerry', 'Spike', 'Tyke'], 'age': [10, 12, 3, 1], 'gender': ['M', 'M', 'M', 'M'], 'score': [85, 90, 78, 92]} df = pd.DataFrame(data) def is_adult(row): return row['age'] >= 18 adult_mask = df.apply(is_adult, axis=1) print(df.loc[adult_mask, ['name', 'score']])
上面的代码中,我们定义了一个is_adult函数,来判断某个人是否成年(这里我们的判断条件是age>=18),然后使用apply函数对整个DataFrame进行处理,得到一个布尔类型的Series,再使用df.loc来访问所有成年人的姓名和分数。结果为:
Empty DataFrame Columns: [name, score] Index: []
由于我们没有任何一个人的年龄>=18,因此返回了一个空的DataFrame。
3. 使用多重条件访问数据
在有些情况下,我们需要同时使用多个条件来访问DataFrame中的数据。可以使用&(与)、|(或)、~(非)等逻辑运算符,将多个条件组合起来。代码示例如下:
import pandas as pd import numpy as np data = {'name': ['Tom', 'Jerry', 'Spike', 'Tyke'], 'age': [10, 12, 3, 1], 'gender': ['M', 'M', 'M', 'M'], 'score': [85, 90, 78, 92]} df = pd.DataFrame(data) bool_indexer1 = (df['age']>=10) & (df['score']>=90) bool_indexer2 = (df['age']=80) bool_indexer = bool_indexer1 | bool_indexer2 print(df.loc[bool_indexer, :])
上面的代码中,我们使用了两个多重布尔条件(bool_indexer1和bool_indexer2),表示需要访问的数据的条件。具体来说,bool_indexer1表示age>=10且score>=90的数据,bool_indexer2表示age[小于]10且score>=80的数据。最后,我们使用|(或)将两个条件组合起来,并使用df.loc来访问所需的行和列。结果为:
name age gender score 0 Tom 10 M 85 1 Jerry 12 M 90 3 Tyke 1 M 92
三、df.loc的注意事项
虽然df.loc非常灵活,但也有一些需要注意的地方。
1. 不要混淆df.loc和df.iloc的用法
在Pandas中,除了df.loc,还有一个类似的方法df.iloc,可以用来访问DataFrame中的数据。df.iloc的基本语法为:df.iloc[row_indexer, column_indexer]。其中row_indexer和column_indexer分别表示需要访问的行和列的索引号。需要注意的是,df.loc使用的是标签索引(label-based indexing),而df.iloc使用的是位置索引(integer-based indexing)。混淆两者的用法很容易引起错误,因此要根据具体情况选择合适的访问方式。
2. 不要修改df.loc返回的数据
df.loc返回的是原DataFrame的一个视图,也就是说,如果直接修改它,会修改原DataFrame的数据,这可能会导致一些不可预料的结果。因此,建议使用df.copy()方法来复制DataFrame的数据,然后对副本进行修改。
3. 不要对df.loc返回的数据进行二次切片
如果对df.loc返回的数据进行二次切片(比如使用df.loc[bool_indexer, :][[‘name’, ‘score’]]这种方式),可能会导致一些性能问题。因此,建议先使用df.loc获取所需的行和列,然后再对结果进行处理。
四、总结
本文详细介绍了df.loc的基本用法和高级用法,包括使用布尔条件访问数据、使用函数访问数据、使用多重条件访问数据等。同时,还介绍了df.loc的注意事项,以帮助读者更好地理解和使用该方法。
原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/311138.html