10.3 常用 Pandas 操作技巧总结 第十章:Pandas 最佳实践与案例 - 10.3 常用 Pandas 操作技巧总结 Pandas 是 Python 数据分析的核心库,提供了强大且灵活的数据结构,使得数据清洗、转换、分析和可视化变得更加容易。本节将总结一些常用的 Pandas 操作技巧,旨在帮助你更高效地使用 Pandas 进行数据处理。 数据导入与导出 Pandas 提供了多种函数用于导入和导出数据,支持 CSV、Excel、SQL 数据库等多种格式。 1.1 读取 CSV 文件: 详解: 是读取 CSV 文件的主要函数。 参数用于指定分隔符,默认为逗号。 参数用于指定编码方式,常见的有 'utf-8'、'gbk' 等,根据文件实际编码选择。
Pandas 是 Python 数据分析的核心库,提供了强大且灵活的数据结构,使得数据清洗、转换、分析和可视化变得更加容易。本节将总结一些常用的 Pandas 操作技巧,旨在帮助你更高效地使用 Pandas 进行数据处理。
Pandas 提供了多种函数用于导入和导出数据,支持 CSV、Excel、SQL 数据库等多种格式。
1.1 读取 CSV 文件:
import pandas as pd # 读取 CSV 文件,指定分隔符、编码方式等 df = pd.read_csv('data.csv', sep=',', encoding='utf-8') print(df.head())
详解:
pd.read_csv() 是读取 CSV 文件的主要函数。
sep 参数用于指定分隔符,默认为逗号。
encoding 参数用于指定编码方式,常见的有 'utf-8'、'gbk' 等,根据文件实际编码选择。
df.head() 用于显示 DataFrame 的前几行,默认为 5 行。
1.2 读取 Excel 文件:
df = pd.read_excel('data.xlsx', sheet_name='Sheet1') print(df.head())
详解:
pd.read_excel() 用于读取 Excel 文件。
sheet_name 参数用于指定要读取的工作表名称。
1.3 导出数据到 CSV 文件:
df.to_csv('output.csv', index=False, encoding='utf-8')
详解:
df.to_csv() 用于将 DataFrame 导出到 CSV 文件。
index=False 表示不将索引写入 CSV 文件。
encoding 参数用于指定编码方式。
Pandas 提供了灵活的方式来选择和过滤数据。
2.1 基于标签的选择 (.loc)
# 选择单列 column_data = df.loc[:, 'column_name'] # 选择多列 subset = df.loc[:, ['column1', 'column2']] # 选择行和列 specific_value = df.loc[0, 'column_name'] # 第一行 'column_name' 列的值 subset_2 = df.loc[0:5, ['column1', 'column2']] # 前六行 'column1' 和 'column2' 列
详解:
.loc 基于标签进行选择。
第一个参数是行标签,第二个参数是列标签。
可以使用切片选择连续的行或列。
2.2 基于位置的选择 (.iloc)
# 选择单列 column_data = df.iloc[:, 0] #第一列 # 选择多列 subset = df.iloc[:, [0, 1]] #第一列和第二列 # 选择行和列 specific_value = df.iloc[0, 0] # 第一行第一列的值 subset_2 = df.iloc[0:5, [0, 1]] # 前六行第一列和第二列
详解:
.iloc 基于位置进行选择。
第一个参数是行索引,第二个参数是列索引。
2.3 条件过滤
# 单个条件 filtered_df = df[df['column_name'] > 10] # 多个条件 (使用 & 和 |) filtered_df = df[(df['column1'] > 10) & (df['column2'] < 20)] # 使用 isin() 方法 filtered_df = df[df['column_name'].isin(['value1', 'value2'])]
详解:
可以使用布尔索引进行条件过滤。
多个条件之间可以使用 & (与) 和 | (或) 连接。
isin() 方法用于判断一列的值是否在给定的列表中。
数据清洗和转换是数据分析的重要步骤。
3.1 处理缺失值
# 检查缺失值 missing_values = df.isnull().sum() print(missing_values) # 填充缺失值 df['column_name'].fillna(df['column_name'].mean(), inplace=True) # 用平均值填充 df['column_name'].fillna(0, inplace=True) # 用0填充 df.fillna(method='ffill', inplace=True) # 用前一个有效值填充 # 删除包含缺失值的行或列 df.dropna(inplace=True) # 删除包含任何缺失值的行 df.dropna(axis=1, inplace=True) # 删除包含任何缺失值的列
详解:
isnull() 方法用于检查缺失值,返回布尔值。
sum() 方法用于统计每列的缺失值数量。
fillna() 方法用于填充缺失值,可以使用平均值、中位数、固定值等。
dropna() 方法用于删除包含缺失值的行或列。
3.2 数据类型转换
# 查看数据类型 print(df.dtypes) # 转换数据类型 df['column_name'] = df['column_name'].astype('int64') df['column_name'] = pd.to_datetime(df['column_name'])
详解:
dtypes 属性用于查看每列的数据类型。
astype() 方法用于转换数据类型。
pd.to_datetime() 用于将字符串转换为 datetime 类型。
3.3 字符串操作
# 字符串替换 df['column_name'] = df['column_name'].str.replace('old_value', 'new_value') # 字符串分割 df['new_column'] = df['column_name'].str.split(',', expand=True)[0] # 取分割后的第一部分 # 字符串拼接 df['full_name'] = df['first_name'] + ' ' + df['last_name'] # 去除字符串前后空格 df['column_name'] = df['column_name'].str.strip()
详解:
str 属性提供了许多字符串操作方法,如 replace()、split()、lower()、upper() 等。
expand=True 参数可以将分割后的结果展开成多列。
Pandas 提供了强大的数据聚合和分组功能。
4.1 分组 (groupby)
# 按单列分组 grouped = df.groupby('column_name') # 按多列分组 grouped = df.groupby(['column1', 'column2'])
详解:
groupby() 方法用于按一列或多列进行分组。
分组后可以进行聚合操作。
4.2 聚合函数
# 计算每组的平均值 mean_values = grouped.mean() # 计算每组的总和 sum_values = grouped.sum() # 计算每组的数量 count_values = grouped.count() # 使用 agg() 方法进行多个聚合操作 aggregated_values = grouped.agg({ 'column1': 'mean', 'column2': 'sum', 'column3': 'count' })
详解:
常见的聚合函数有 mean()、sum()、count()、min()、max()、std() 等。
agg() 方法可以同时进行多个聚合操作,并指定每列的聚合函数。
Pandas 提供了多种方法用于合并和连接数据。
5.1 合并 (concat)
# 垂直合并 (按行合并) df_concat = pd.concat([df1, df2]) # 水平合并 (按列合并) df_concat = pd.concat([df1, df2], axis=1)
详解:
pd.concat() 用于合并多个 DataFrame。
axis=0 表示按行合并,axis=1 表示按列合并。
5.2 连接 (merge)
# 基于单列连接 df_merged = pd.merge(df1, df2, on='column_name', how='inner') # 基于多列连接 df_merged = pd.merge(df1, df2, on=['column1', 'column2'], how='left')
详解:
pd.merge() 用于连接两个 DataFrame。
on 参数用于指定连接的列。
how 参数用于指定连接方式,常见的有 inner (内连接)、left (左连接)、right (右连接)、outer (外连接)。
# 按单列排序 df_sorted = df.sort_values(by='column_name', ascending=True) # 升序 # 按多列排序 df_sorted = df.sort_values(by=['column1', 'column2'], ascending=[True, False]) # column1 升序,column2 降序
详解:
sort_values() 方法用于按一列或多列进行排序。
ascending 参数用于指定排序方式,True 表示升序,False 表示降序。
# 创建透视表 pivot_table = pd.pivot_table(df, values='value_column', index='index_column', columns='column_column', aggfunc='mean')
详解:
pd.pivot_table() 用于创建透视表。
values 参数用于指定要聚合的列。
index 参数用于指定行索引。
columns 参数用于指定列索引。
aggfunc 参数用于指定聚合函数。
# 简单随机采样 sampled_df = df.sample(n=100) # 随机抽取 100 行 # 按比例采样 sampled_df = df.sample(frac=0.1) # 随机抽取 10% 的数据
详解:
sample() 方法用于进行数据采样。
n 参数用于指定要抽取的样本数量。
frac 参数用于指定要抽取的样本比例。
虽然尽量避免迭代,但在某些情况下可能需要迭代 DataFrame。
# 迭代行 for index, row in df.iterrows(): # 处理每一行的数据 print(index, row['column_name'])
详解:
iterrows() 方法用于迭代 DataFrame 的每一行。
迭代效率较低,尽量使用向量化操作。
apply() 函数apply() 函数可以对 DataFrame 的行或列应用自定义函数。
# 对单列应用函数 df['new_column'] = df['column_name'].apply(lambda x: x * 2) # 对整行应用函数 df['new_column'] = df.apply(lambda row: row['column1'] + row['column2'], axis=1)
详解:
apply() 函数可以对 DataFrame 的行或列应用自定义函数。
axis=0 表示对列应用函数,axis=1 表示对行应用函数。
可以使用 lambda 表达式定义简单的函数。
以上是一些常用的 Pandas 操作技巧,涵盖了数据导入与导出、数据选择与过滤、数据清洗与转换、数据聚合与分组、数据合并与连接、数据排序等方面。 熟练掌握这些技巧可以让你更高效地使用 Pandas 进行数据分析。 在实际应用中,需要根据具体情况选择合适的方法。 建议多加练习,才能真正掌握这些技巧。 记住,效率和代码可读性同样重要。