本文全面介绍了pandas这一强大的Python数据分析库,涵盖了其主要功能、数据结构和使用方法。文章详细讲解了pandas在数据导入导出、清洗预处理、筛选排序以及聚合分组等方面的应用技巧,帮助读者轻松掌握数据处理技能。
pandas入门指南:轻松掌握数据处理技巧 1. pandas简介1.1 什么是pandas
pandas是一个强大的Python数据分析库,它提供了高性能、易用的数据结构和数据分析工具。pandas基于NumPy构建,但提供了更为高级的数据操作功能。
1.2 pandas的主要功能和优势
-
数据结构:pandas提供了两种主要的数据结构:
Series
和DataFrame
。Series
是一种一维数据结构,而DataFrame
是一种二维表格型数据结构,能够很好地处理各种类型的数据。 -
数据导入和导出:pandas支持多种数据格式的读取和写入,如CSV、Excel、SQL数据库等。
-
数据清洗与预处理:可以方便地处理缺失值、重复值、数据类型转换等。
-
数据筛选与排序:支持复杂的条件筛选与排序,可以灵活地获取所需的数据子集。
-
数据聚合与分组:提供了丰富的聚合与分组功能,可以进行复杂的统计分析。
-
时间序列分析:pandas内置了处理时间序列的能力,支持各种时间序列的操作和分析。
-
高性能:pandas利用了C语言的性能优化,提供了高效的数值计算性能。例如,下面的代码展示了pandas在处理大数组时的高效性:
import pandas as pd import numpy as np import time # 生成大数组 big_array = np.random.randn(1000000) big_series = pd.Series(big_array) # 计时 start_time = time.time() sum(big_array) print(f"NumPy sum: {time.time() - start_time}") start_time = time.time() big_series.sum() print(f"pandas Series sum: {time.time() - start_time}")
1.3 pandas的安装和基本使用方法
安装pandas的方法通常是使用Python的包管理工具pip:
pip install pandas
基本使用示例
import pandas as pd
# 创建Series
s = pd.Series([1, 3, 5, np.nan, 6, 8])
print(s)
# 创建DataFrame
data = {'Name': ['Tom', 'Dick', 'Harry', 'Peter'],
'Age': [20, 24, 28, 32],
'City': ['NYC', 'LA', 'Chicago', 'Houston']}
df = pd.DataFrame(data)
print(df)
2. pandas数据结构
2.1 Series对象
2.1.1 创建Series对象的方法
Series
对象是pandas中最基本的数据结构之一,它类似于一维数组,但可以包含任意数据类型,并且可以有索引。
import pandas as pd
import numpy as np
# 创建一个简单的Series
s = pd.Series([1, 3, 5, np.nan, 6, 8])
print(s)
# 带有自定义索引的Series
s = pd.Series([1, 3, 5, np.nan, 6, 8], index=['a', 'b', 'c', 'd', 'e', 'f'])
print(s)
2.1.2 Series对象的基本操作
- 索引访问
# 访问第一个元素
print(s[0])
# 使用索引访问
print(s['a'])
- 切片操作
# 切片访问
print(s[0:3])
- 统计操作
# 统计操作
print(s.mean())
print(s.sum())
- 数据修改
# 修改元素
s[0] = 10
print(s)
# 修改索引元素
s['a'] = 100
print(s)
2.2 DataFrame对象
2.2.1 创建DataFrame对象的方法
DataFrame
对象是pandas中最常用的数据结构之一,它是一个二维表格型数据结构,可以用来存储结构化的数据,类似于Excel表格。
import pandas as pd
# 通过字典创建DataFrame
data = {'Name': ['Tom', 'Dick', 'Harry', 'Peter'],
'Age': [20, 24, 28, 32],
'City': ['NYC', 'LA', 'Chicago', 'Houston']}
df = pd.DataFrame(data)
print(df)
# 通过列表创建DataFrame
data = [['Tom', 20, 'NYC'], ['Dick', 24, 'LA'], ['Harry', 28, 'Chicago'], ['Peter', 32, 'Houston']]
columns = ['Name', 'Age', 'City']
df = pd.DataFrame(data, columns=columns)
print(df)
2.2.2 DataFrame对象的基本操作
- 索引访问
# 访问某一列(列名)
print(df['Age'])
# 访问某一列(列索引)
print(df.iloc[:, 1])
# 访问某一行(行索引)
print(df.iloc[1])
- 数据修改
# 修改某一列
df['Age'] = df['Age'] + 1
print(df)
# 修改某一单元格
df.at[1, 'Age'] = 25
print(df)
- 统计操作
# 计算列的平均值
print(df['Age'].mean())
# 计算行的平均值
print(df.mean(axis=1))
2.3 Index对象和常用数据类型
2.3.1 Index对象
Index
对象是pandas用来表示索引的特殊对象,它表示数据结构的标签。
import pandas as pd
# 创建Index对象
index = pd.Index(['a', 'b', 'c', 'd', 'e', 'f'])
print(index)
# 判断Index对象
print(index.is_unique)
print(index.is_monotonic_increasing)
2.3.2 常用数据类型
pandas支持多种数据类型,包括int
、float
、object
(字符串)、datetime
和category
等。例如,下面的代码展示了如何转换不同类型的数据:
import pandas as pd
# 创建一个包含不同数据类型的DataFrame
data = {'Name': ['Tom', 'Dick', 'Harry'],
'Age': [20, 24, 28],
'Salary': [50000.0, 60000.0, None],
'Birthdate': ['1990-01-01', '1985-03-15', '1980-09-23']}
df = pd.DataFrame(data)
print(df.dtypes)
# 转换数据类型
df['Salary'] = df['Salary'].astype(int)
df['Birthdate'] = pd.to_datetime(df['Birthdate'])
print(df.dtypes)
3. 数据导入与导出
3.1 读取CSV文件
pandas
提供了多种读取数据的方法,其中read_csv
是读取CSV文件最常用的方法。
import pandas as pd
# 读取CSV文件
df = pd.read_csv('example.csv')
print(df)
3.2 读取Excel文件
pandas
也提供了读取Excel文件的功能。
import pandas as pd
# 读取Excel文件
df = pd.read_excel('example.xlsx')
print(df)
3.3 读取数据库中的数据
pandas
支持从多种数据库读取数据,如SQL数据库。例如,下面的代码展示了如何从MySQL数据库读取数据:
import pandas as pd
import pymysql
# 读取MySQL数据库中的数据
conn = pymysql.connect(host='localhost', user='root', password='password', db='example_db')
query = 'SELECT * FROM example_table'
df = pd.read_sql(query, conn)
print(df)
3.4 将数据保存为各种格式
pandas
不仅支持读取数据,也支持将数据保存为各种格式。
import pandas as pd
# 保存为CSV文件
df.to_csv('output.csv', index=False)
# 保存为Excel文件
df.to_excel('output.xlsx', index=False)
# 保存为SQL数据库
conn = sqlite3.connect('example.db')
df.to_sql('output_table', conn, if_exists='replace', index=False)
4. 数据清洗与预处理
4.1 缺失值处理
4.1.1 缺失值的识别
在进行数据清洗时,首先要识别并处理缺失值。
import pandas as pd
# 创建包含缺失值的DataFrame
data = {'Name': ['Tom', 'Dick', None, 'Peter'],
'Age': [20, None, 28, 32],
'City': ['NYC', 'LA', 'Chicago', 'Houston']}
df = pd.DataFrame(data)
print(df)
# 识别缺失值
print(df.isna().sum())
4.1.2 缺失值的填充和删除
填充缺失值的方法包括fillna
和interpolate
等,删除缺失值的方法是dropna
。
import pandas as pd
# 填充缺失值
df.fillna(value={'Age': 25, 'City': 'Unknown'}, inplace=True)
print(df)
# 删除缺失值
df.dropna(how='any', inplace=True)
print(df)
4.2 数据类型转换
4.2.1 数据类型的识别
pandas
提供了多种方法来识别数据类型。
import pandas as pd
# 创建一个DataFrame
data = {'Name': ['Tom', 'Dick', 'Harry'],
'Age': [20, 24, 28],
'Salary': [50000.0, 60000.0, 70000.0]}
df = pd.DataFrame(data)
print(df.dtypes)
4.2.2 数据类型的转换
pandas
提供了多种方法来转换数据类型,如astype
、infer_objects
等。
import pandas as pd
# 转换数据类型
df['Age'] = df['Age'].astype(str)
print(df.dtypes)
4.3 重复数据处理
pandas
提供了检测和处理重复数据的多种方法,如duplicated
和drop_duplicates
。例如,下面的代码展示了如何保留重复数据的一个实例:
import pandas as pd
# 创建一个包含重复数据的DataFrame
data = {'Name': ['Tom', 'Dick', 'Harry', 'Tom', 'Dick'],
'Age': [20, 24, 28, 20, 24],
'City': ['NYC', 'LA', 'Chicago', 'NYC', 'LA']}
df = pd.DataFrame(data)
print(df)
# 保留第一个重复的数据
df.drop_duplicates(subset='Name', keep='first', inplace=True)
print(df)
5. 数据筛选与排序
5.1 筛选数据
5.1.1 基于条件筛选
pandas
提供了多种基于条件筛选数据的方法。
import pandas as pd
# 创建一个DataFrame
data = {'Name': ['Tom', 'Dick', 'Harry', 'Peter'],
'Age': [20, 24, 28, 32],
'City': ['NYC', 'LA', 'Chicago', 'Houston']}
df = pd.DataFrame(data)
print(df)
# 基于条件筛选
filtered_df = df[df['Age'] > 24]
print(filtered_df)
5.1.2 通过索引筛选
pandas
也支持通过索引进行筛选。
import pandas as pd
# 创建一个DataFrame
data = {'Name': ['Tom', 'Dick', 'Harry', 'Peter'],
'Age': [20, 24, 28, 32],
'City': ['NYC', 'LA', 'Chicago', 'Houston']}
df = pd.DataFrame(data)
print(df)
# 通过索引筛选
filtered_df = df[df.index.isin([0, 3])]
print(filtered_df)
5.1.3 混合条件筛选
可以结合多个条件进行筛选。
import pandas as pd
# 创建一个DataFrame
data = {'Name': ['Tom', 'Dick', 'Harry', 'Peter'],
'Age': [20, 24, 28, 32],
'City': ['NYC', 'LA', 'Chicago', 'Houston']}
df = pd.DataFrame(data)
print(df)
# 混合条件筛选
filtered_df = df[(df['Age'] > 24) & (df['City'] == 'Chicago')]
print(filtered_df)
5.2 数据排序
5.2.1 按列排序
pandas
提供了按列进行排序的功能。
import pandas as pd
# 创建一个DataFrame
data = {'Name': ['Tom', 'Dick', 'Harry', 'Peter'],
'Age': [20, 24, 28, 32],
'City': ['NYC', 'LA', 'Chicago', 'Houston']}
df = pd.DataFrame(data)
print(df)
# 按Age列排序
sorted_df = df.sort_values(by='Age', ascending=True)
print(sorted_df)
5.2.2 按行排序
pandas
也支持按行进行排序。
import pandas as pd
# 创建一个DataFrame
data = {'Name': ['Tom', 'Dick', 'Harry', 'Peter'],
'Age': [20, 24, 28, 32],
'City': ['NYC', 'LA', 'Chicago', 'Houston']}
df = pd.DataFrame(data)
print(df)
# 按City列排序
sorted_df = df.sort_values(by='City', ascending=True)
print(sorted_df)
5.2.3 多列排序
还可以按多列进行排序。
import pandas as pd
# 创建一个DataFrame
data = {'Name': ['Tom', 'Dick', 'Harry', 'Peter'],
'Age': [20, 24, 28, 32],
'City': ['NYC', 'LA', 'Chicago', 'Houston']}
df = pd.DataFrame(data)
print(df)
# 按多列排序
sorted_df = df.sort_values(by=['Age', 'City'], ascending=[True, False])
print(sorted_df)
6. 数据聚合与分组
6.1 数据聚合
6.1.1 基本聚合函数
pandas
提供了多种基本的聚合函数,如sum
、mean
、max
等。
import pandas as pd
# 创建一个DataFrame
data = {'Name': ['Tom', 'Dick', 'Harry', 'Peter'],
'Age': [20, 24, 28, 32],
'Salary': [50000.0, 60000.0, 70000.0, 80000.0]}
df = pd.DataFrame(data)
print(df)
# 基本聚合函数
print(df['Age'].mean())
print(df['Salary'].sum())
6.1.2 自定义聚合函数
除了内置的聚合函数,还可以自定义聚合函数。
import pandas as pd
import numpy as np
# 自定义聚合函数
def custom_aggregation(series):
return series.median()
# 创建一个DataFrame
data = {'Name': ['Tom', 'Dick', 'Harry', 'Peter'],
'Age': [20, 24, 28, 32],
'Salary': [50000.0, 60000.0, 70000.0, 80000.0]}
df = pd.DataFrame(data)
print(df)
# 自定义聚合
print(df['Age'].agg(custom_aggregation))
print(df['Salary'].agg([custom_aggregation, np.mean]))
6.2 数据分组
6.2.1 分组依据
pandas
支持多种分组依据,如单列或多列。
import pandas as pd
# 创建一个DataFrame
data = {'Name': ['Tom', 'Dick', 'Harry', 'Peter'],
'Age': [20, 24, 28, 32],
'City': ['NYC', 'LA', 'NYC', 'LA']}
df = pd.DataFrame(data)
print(df)
# 单列分组
grouped = df.groupby('City')
print(grouped.groups)
# 多列分组
grouped = df.groupby(['City', 'Age'])
print(grouped.groups)
6.2.2 分组后的操作
pandas
提供了多种对分组后的数据进行操作的方法,如agg
、apply
等。
import pandas as pd
# 创建一个DataFrame
data = {'Name': ['Tom', 'Dick', 'Harry', 'Peter'],
'Age': [20, 24, 28, 32],
'City': ['NYC', 'LA', 'NYC', 'LA']}
df = pd.DataFrame(data)
print(df)
# 分组后的聚合操作
grouped = df.groupby('City')['Age'].mean()
print(grouped)
# 分组后的自定义操作
def custom_operation(group):
return group['Age'].median()
grouped = df.groupby('City').apply(custom_operation)
print(grouped)
6.2.3 分组后统计
可以进行分组后的统计操作,如计数、求和等。
import pandas as pd
# 创建一个DataFrame
data = {'Name': ['Tom', 'Dick', 'Harry', 'Peter'],
'Age': [20, 24, 28, 32],
'City': ['NYC', 'LA', 'NYC', 'LA']}
df = pd.DataFrame(data)
print(df)
# 分组后统计
grouped = df.groupby('City').agg({'Age': ['count', 'mean', 'min', 'max']})
print(grouped)
通过以上详细的指南,您可以掌握pandas的主要功能和使用方法,轻松进行数据处理和分析。希望这些示例和代码能够帮助您更好地理解和应用pandas。对于更深入的学习,建议参考pandas官方文档或参加pandas相关课程。
共同学习,写下你的评论
评论加载中...
作者其他优质文章