10.3 常用 Pandas 操作技巧总结


文档摘要

10.3 常用 Pandas 操作技巧总结 第十章:Pandas 最佳实践与案例 - 10.3 常用 Pandas 操作技巧总结 Pandas 是 Python 数据分析的核心库,提供了强大且灵活的数据结构,使得数据清洗、转换、分析和可视化变得更加容易。本节将总结一些常用的 Pandas 操作技巧,旨在帮助你更高效地使用 Pandas 进行数据处理。 数据导入与导出 Pandas 提供了多种函数用于导入和导出数据,支持 CSV、Excel、SQL 数据库等多种格式。 1.1 读取 CSV 文件: 详解: 是读取 CSV 文件的主要函数。 参数用于指定分隔符,默认为逗号。 参数用于指定编码方式,常见的有 'utf-8'、'gbk' 等,根据文件实际编码选择。

10.3 常用 Pandas 操作技巧总结

第十章:Pandas 最佳实践与案例 - 10.3 常用 Pandas 操作技巧总结

Pandas 是 Python 数据分析的核心库,提供了强大且灵活的数据结构,使得数据清洗、转换、分析和可视化变得更加容易。本节将总结一些常用的 Pandas 操作技巧,旨在帮助你更高效地使用 Pandas 进行数据处理。

1. 数据导入与导出

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 参数用于指定编码方式。

2. 数据选择与过滤

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. 数据清洗与转换

数据清洗和转换是数据分析的重要步骤。

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 参数可以将分割后的结果展开成多列。

4. 数据聚合与分组

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() 方法可以同时进行多个聚合操作,并指定每列的聚合函数。

5. 数据合并与连接

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 (外连接)。

6. 数据排序

# 按单列排序 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 表示降序。

7. 数据透视表

# 创建透视表 pivot_table = pd.pivot_table(df, values='value_column', index='index_column', columns='column_column', aggfunc='mean')

详解:

  • pd.pivot_table() 用于创建透视表。

  • values 参数用于指定要聚合的列。

  • index 参数用于指定行索引。

  • columns 参数用于指定列索引。

  • aggfunc 参数用于指定聚合函数。

8. 数据采样

# 简单随机采样 sampled_df = df.sample(n=100) # 随机抽取 100 行 # 按比例采样 sampled_df = df.sample(frac=0.1) # 随机抽取 10% 的数据

详解:

  • sample() 方法用于进行数据采样。

  • n 参数用于指定要抽取的样本数量。

  • frac 参数用于指定要抽取的样本比例。

9. 迭代 DataFrame

虽然尽量避免迭代,但在某些情况下可能需要迭代 DataFrame。

# 迭代行 for index, row in df.iterrows(): # 处理每一行的数据 print(index, row['column_name'])

详解:

  • iterrows() 方法用于迭代 DataFrame 的每一行。

  • 迭代效率较低,尽量使用向量化操作。

10. 使用 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 进行数据分析。 在实际应用中,需要根据具体情况选择合适的方法。 建议多加练习,才能真正掌握这些技巧。 记住,效率和代码可读性同样重要。


发布者: 作者: 转发
评论区 (0)
U