Pandas 数据查找及修改操作 iloc() & loc() bool类型索引

本文通过实例演示了如何使用Pandas进行数据加载、利用iloc和loc进行数据查找及修改的操作,并介绍了如何应用布尔索引筛选特定数据。

代码运行基于jupyter notebook

一、数据加载

import pandas as pd
import pickle
with open('titanic.pickle', 'rb') as file:
    df = pickle.load(file)

二、.iloc() 用位置查找、修改数据

df = df.set_index('Name')
df.head()

在这里插入图片描述

查找数据

df.iloc[0:5, 1:3]

在这里插入图片描述

修改数据

print(df.iloc[0,4])
# 22.0
df.iloc[0,4] = 1000
df.head()

在这里插入图片描述

三、.loc() 用标签查找、修改数据

查找数据

df.loc['Heikkinen, Miss. Laina']

在这里插入图片描述

修改数据

print(df.loc['Heikkinen, Miss. Laina','Age'])
# 26.0 
df.loc['Heikkinen, Miss. Laina','Age'] = 18
df.head()

在这里插入图片描述

三、bool类型索引

# 选择船票价格大于40的乘客
#df[df['Fare'] > 40]
# 选择船票价格大于40的前五个乘客
#df[df['Fare'] > 40][:5]
# 选择前五个男性乘客
#df[df['Sex'] == 'male'][:5]
# 注意 df['Fare'] > 40 返回的一个bool类型列
# df[df['Fare'] > 40]才能选择出满足要求的数据行
df['Fare'] > 40

在这里插入图片描述

# 计算大于70岁的乘客的人数
# (df['Age']>70).sum()

#计算所有男性的平均年龄  这三行代码等价
# iloc貌似不能直接用布尔索引当做掩码
#ValueError: iLocation based boolean indexing cannot use an indexable as a mask

df.loc[df['Sex'] == 'male', 'Age'].mean()
df.iloc[(df['Sex'] == 'male').values, 4].mean()
df.iloc[list(df['Sex'] == 'male'), 4].mean()

四、参考资料

《Pandas Cookbook》第05章 布尔索引

`pandas.DataFrame`类型数据的常用操作方法有以下几类: ### 数据选择与筛选 - **列选择**:通过列名选择单列或多列数据。 ```python import pandas as pd data = {'age': [10, 20, 30], 'name': ['tim', 'john', 'rose'], 'income': [100, 200, 300]} df = pd.DataFrame(data) # 选择单列 age_column = df['age'] # 选择多列 name_income_columns = df[['name', 'income']] ``` - **行选择**:使用`loc`和`iloc`方法选择行。`loc`基于标签索引,`iloc`基于整数索引。 ```python # 选择第一行(基于标签索引) first_row_loc = df.loc[0] # 选择第一行(基于整数索引) first_row_iloc = df.iloc[0] ``` - **条件筛选**:使用布尔索引或`query`方法进行条件筛选。 ```python # 布尔索引筛选年龄大于15的行 filtered_df_bool = df[df['age'] > 15] # query方法筛选年龄大于15的行 filtered_df_query = df.query('age > 15') ``` ### 数据计算与统计 - **列计算**:对列进行数学运算。 ```python # 计算收入翻倍后的新列 df['double_income'] = df['income'] * 2 ``` - **统计方法**:使用`mean`、`sum`、`max`、`min`等方法进行统计计算。 ```python # 计算年龄的平均值 age_mean = df['age'].mean() # 计算收入的总和 income_sum = df['income'].sum() ``` ### 数据处理与转换 - **缺失值处理**:使用`fillna`方法填充缺失值,`dropna`方法删除缺失值所在的行或列。 ```python import numpy as np # 创建包含缺失值的DataFrame df_with_nan = pd.DataFrame({'col1': [1, np.nan, 3], 'col2': [4, 5, np.nan]}) # 填充缺失值为0 df_filled = df_with_nan.fillna(0) # 删除包含缺失值的行 df_dropped = df_with_nan.dropna() ``` - **数据类型转换**:使用`astype`方法转换列的数据类型。 ```python # 将年龄列转换为字符串类型 df['age'] = df['age'].astype(str) ``` ### 数据合并与连接 - **合并**:使用`merge`方法根据列的值合并两个`DataFrame`。 ```python df1 = pd.DataFrame({'key': ['A', 'B', 'C'], 'value1': [1, 2, 3]}) df2 = pd.DataFrame({'key': ['A', 'B', 'D'], 'value2': [4, 5, 6]}) merged_df = pd.merge(df1, df2, on='key') ``` - **连接**:使用`concat`方法按行或列连接多个`DataFrame`。 ```python df3 = pd.DataFrame({'col1': [7, 8], 'col2': [9, 10]}) df4 = pd.DataFrame({'col1': [11, 12], 'col2': [13, 14]}) # 按行连接 concatenated_df = pd.concat([df3, df4], axis=0) ``` ### 数据分组与聚合 - **分组**:使用`groupby`方法按列进行分组。 ```python # 按年龄分组并计算收入的平均值 grouped = df.groupby('age')['income'].mean() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值