pandas 是一个开源的 Python 数据分析库,它提供了快速、灵活和富有表现力的数据结构,旨在使“关系”或“标记”数据的“快速分析、清洗和转换”变得既简单又直观。pandas 非常适合于数据清洗和转换、数据分析和建模等任务。以下是 pandas 的基本概念和主要特征:
基本概念
- DataFrame:
- DataFrame 是 pandas 提供的一个二维的、大小可变的、可以存储多种类型数据的表格型数据结构。它既有行索引也有列索引,可以被看作是一个 Excel 表格,或者是 SQL 表,或者是字典的字典。
- DataFrame 中的数据以行列的形式存储,其中行由索引标识,列由列名标识。
- Series:
- Series 是一个一维数组对象,能够保存任何数据类型(整数、字符串、浮点数、Python 对象等)。它有一个标签与之关联,可以看作是 DataFrame 的一列。
主要特征
- 灵活的数据结构:
- pandas 提供了 DataFrame 和 Series 两种灵活的数据结构,可以方便地处理标记数据和关系数据。
- 强大的数据操作能力:
- 提供了大量用于数据清洗、转换、筛选、分组、聚合等操作的函数和方法。
- 支持布尔索引、标签索引、位置索引等多种索引方式。
- 集成数据缺失处理:
- pandas 提供了一套丰富的功能来处理含有缺失值的数据,如填充缺失值、删除含有缺失值的行等。
- 数据合并和连接:
- pandas 可以方便地将多个 DataFrame 或 Series 合并或连接在一起,支持多种合并策略(如内连接、外连接等)。
- 时间序列处理:
- pandas 提供了强大的时间序列处理功能,可以轻松地进行日期范围生成、日期偏移、时间频率转换等操作。
- 数据可视化集成:
- pandas 可以与 matplotlib、seaborn 等可视化库无缝集成,方便地将数据可视化。
- 高性能:
- pandas 的底层实现采用了 NumPy 库,因此具有高效的数值计算性能。
- pandas 还提供了多种优化手段,如内存优化、计算优化等,确保在处理大规模数据时依然保持高性能。
- 易用性:
- pandas 提供了丰富的 API 和文档,使得用户能够轻松地学习和使用。
- pandas 的语法直观易懂,与 Python 的风格保持一致,降低了学习成本。
通过结合以上这些特点,pandas 成为了数据分析师和数据科学家不可或缺的工具之一。
简单接触一些:
pd.concat()
这个函数用于将多个pandas对象(如DataFrame或Series)沿着一条特定的轴拼接起来。
import pandas as pd
# 创建两个简单的DataFrame
df1 = pd.DataFrame({'A': [1, 2], 'B': [3, 4]})
df2 = pd.DataFrame({'A': [5, 6], 'B': [7, 8]})
# 使用pd.concat按行拼接
result = pd.concat([df1, df2])
print(result)
print("______________________________")
# 按列拼接
result_col = pd.concat([df1, df2], axis=1)
print(result_col)
pd.melt()
这个函数用于将DataFrame中的列转换为行格式,常用于数据重塑。
pd.get_dummies()
这个函数用于将分类变量转换为哑变量(dummy variables,或称为独热编码)。
DataFrame.groupby()
DataFrame的groupby
方法用于根据一个或多个列对数据进行分组,并对每个组执行某些操作(如聚合)。
df = pd.DataFrame({
'A': ['foo', 'foo', 'foo', 'bar', 'bar'],
'B': ['one', 'one', 'two', 'two', 'one'],
'C': ['small', 'large', 'large', 'small', 'small'],
'D': [1, 2, 2, 3, 3],
'E': [2, 4, 5, 5, 6]
})
# 按列'A'分组,并计算每组的'D'列的平均值
grouped = df.groupby('A')['D'].mean()
print(grouped)
DataFrame.merge()
DataFrame的merge
方法用于根据一个或多个键将两个DataFrame合并在一起。
left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']})
# 按'key'列进行内连接
merged = left.merge(right, on='key')
print(merged)
常用的函数和方法示例
数据导入与导出
pd.read_csv()
用于读取CSV文件并转换为DataFrame。
df = pd.read_csv('data.csv')
DataFrame.to_csv()
df.to_csv('output.csv', index=False)
数据查看与描述
DataFrame.head() 和 DataFrame.tail()
查看DataFrame的前几行或后几行
# 查看前3行
print(df.head(3))
# 查看后2行
print(df.tail(2))
DataFrame.info()
打印DataFrame的简要摘要信息,包括每列的非空值数量、数据类型等。
df.info()
DataFrame.describe()
生成描述性统计信息,包括计数、均值、标准差、最小值、25%、50%、75%分位数和最大值,主要针对数值型列。
df.describe()
数据选择与过滤
DataFrame.loc[] 和 DataFrame.iloc[]
基于标签或整数位置选择数据。
# 使用标签选择数据
print(df.loc[0:2, 'A':'B'])
# 使用整数位置选择数据
print(df.iloc[0:2, 0:2])
DataFrame.filter()
基于列标签选择列。
filtered = df.filter(like='A', axis=1)
DataFrame.query()
使用查询字符串进行数据过滤。
filtered = df.query('A > 1 & B < 4')