pandas的基础用法

发布时间:2021-09-15 14:11:03 作者:chen
来源:亿速云 阅读:214
# pandas的基础用法

## 1. 引言

### 1.1 pandas简介

pandas是Python编程语言中一个强大的开源数据分析和操作库,由Wes McKinney于2008年开发。名称"pandas"源自"panel data"(面板数据)的缩写。它构建在NumPy库之上,为Python提供了高效、灵活的数据结构,特别适合处理结构化数据(如表格数据、时间序列等)。

pandas的两个核心数据结构是:
- **Series**:一维标记数组,可以存储任何数据类型
- **DataFrame**:二维标记数据结构,可以看作是由Series组成的字典

### 1.2 pandas的优势

1. **高效处理数据**:pandas针对性能进行了优化,特别是对于大型数据集
2. **丰富的数据操作**:提供数据清洗、转换、聚合、合并等多种功能
3. **强大的IO工具**:支持从CSV、Excel、SQL数据库、JSON等多种格式读写数据
4. **与其它库的良好集成**:与NumPy、Matplotlib、scikit-learn等库无缝协作
5. **灵活处理缺失数据**:提供专门的方法处理NaN值

### 1.3 安装与导入

安装pandas(如果尚未安装):
```bash
pip install pandas

标准导入方式:

import pandas as pd

2. 基本数据结构

2.1 Series

Series是pandas中最基本的对象,类似于一维数组,但带有标签(索引)。

创建Series

import pandas as pd

# 从列表创建
s1 = pd.Series([1, 3, 5, 7, 9])
print(s1)

# 从字典创建
s2 = pd.Series({'a': 1, 'b': 2, 'c': 3})
print(s2)

# 指定索引
s3 = pd.Series([10, 20, 30], index=['x', 'y', 'z'])
print(s3)

Series基本操作

# 访问元素
print(s2['a'])  # 输出1

# 切片
print(s1[1:4])

# 数学运算
print(s1 * 2)

# 条件筛选
print(s1[s1 > 4])

2.2 DataFrame

DataFrame是pandas中最重要的数据结构,类似于电子表格或SQL表。

创建DataFrame

# 从字典创建
data = {
    'Name': ['Alice', 'Bob', 'Charlie'],
    'Age': [25, 30, 35],
    'City': ['New York', 'Paris', 'London']
}
df = pd.DataFrame(data)
print(df)

# 从列表创建
data = [
    ['Alice', 25, 'New York'],
    ['Bob', 30, 'Paris'],
    ['Charlie', 35, 'London']
]
df = pd.DataFrame(data, columns=['Name', 'Age', 'City'])
print(df)

# 从CSV文件创建
df = pd.read_csv('data.csv')

DataFrame基本结构

# 查看前几行
print(df.head())

# 查看基本信息
print(df.info())

# 查看统计摘要
print(df.describe())

# 查看列名
print(df.columns)

# 查看索引
print(df.index)

3. 数据读取与写入

3.1 读取数据

pandas支持多种数据格式的读取:

CSV文件

df = pd.read_csv('data.csv')
# 常用参数
df = pd.read_csv('data.csv', sep=',', header=0, index_col=0, encoding='utf-8')

Excel文件

df = pd.read_excel('data.xlsx', sheet_name='Sheet1')

JSON数据

df = pd.read_json('data.json')

SQL数据库

import sqlite3
conn = sqlite3.connect('database.db')
df = pd.read_sql('SELECT * FROM table_name', conn)

3.2 写入数据

写入CSV

df.to_csv('output.csv', index=False)

写入Excel

df.to_excel('output.xlsx', sheet_name='Sheet1', index=False)

写入JSON

df.to_json('output.json')

写入SQL

df.to_sql('table_name', conn, if_exists='replace', index=False)

4. 数据查看与选择

4.1 查看数据

# 查看前n行
df.head(5)

# 查看后n行
df.tail(3)

# 随机查看n行
df.sample(2)

# 查看形状
df.shape

# 查看数据类型
df.dtypes

# 查看唯一值
df['column'].unique()

# 查看值计数
df['column'].value_counts()

4.2 选择数据

选择列

# 选择单列
df['Name']

# 选择多列
df[['Name', 'Age']]

选择行

# 通过索引标签
df.loc[0]  # 选择第一行

# 通过位置
df.iloc[0]  # 选择第一行

# 切片选择
df[0:2]  # 选择前两行

条件选择

# 简单条件
df[df['Age'] > 30]

# 多条件
df[(df['Age'] > 25) & (df['City'] == 'Paris')]

# isin方法
df[df['City'].isin(['New York', 'London'])]

使用query方法

df.query('Age > 25 and City == "Paris"')

5. 数据清洗

5.1 处理缺失值

# 检测缺失值
df.isnull()
df.isnull().sum()

# 删除缺失值
df.dropna()  # 删除包含NaN的行
df.dropna(axis=1)  # 删除包含NaN的列
df.dropna(thresh=2)  # 至少保留2个非NaN值

# 填充缺失值
df.fillna(0)  # 用0填充
df.fillna(df.mean())  # 用平均值填充
df.fillna(method='ffill')  # 前向填充

5.2 处理重复值

# 检测重复行
df.duplicated()

# 删除重复行
df.drop_duplicates()

# 基于特定列删除重复
df.drop_duplicates(subset=['Name'])

5.3 数据类型转换

# 查看数据类型
df.dtypes

# 转换数据类型
df['Age'] = df['Age'].astype('float64')

# 转换为日期时间
df['Date'] = pd.to_datetime(df['Date'])

# 转换为分类数据
df['City'] = df['City'].astype('category')

5.4 重命名列

df.rename(columns={'old_name': 'new_name'}, inplace=True)

# 批量重命名
df.columns = ['col1', 'col2', 'col3']

5.5 重置索引

df.reset_index(drop=True, inplace=True)

6. 数据操作与转换

6.1 添加/删除列

# 添加新列
df['New_Column'] = df['Age'] * 2

# 删除列
df.drop('New_Column', axis=1, inplace=True)

6.2 排序

# 按单列排序
df.sort_values('Age', ascending=False)

# 按多列排序
df.sort_values(['City', 'Age'], ascending=[True, False])

6.3 分组聚合

# 简单分组
df.groupby('City').mean()

# 多列分组
df.groupby(['City', 'Age']).sum()

# 多种聚合函数
df.groupby('City').agg({'Age': ['mean', 'min', 'max'], 'Salary': 'sum'})

6.4 应用函数

# 应用简单函数
df['Age'].apply(lambda x: x * 2)

# 应用复杂函数
def categorize(age):
    if age < 30:
        return 'Young'
    elif age < 50:
        return 'Middle-aged'
    else:
        return 'Senior'

df['Age_Category'] = df['Age'].apply(categorize)

6.5 数据透视表

pd.pivot_table(df, values='Age', index='City', columns='Gender', aggfunc='mean')

7. 数据合并与连接

7.1 concat

# 垂直合并
pd.concat([df1, df2], axis=0)

# 水平合并
pd.concat([df1, df2], axis=1)

7.2 merge

# 类似SQL的JOIN操作
pd.merge(df1, df2, on='key')

# 不同连接方式
pd.merge(df1, df2, how='left', on='key')
pd.merge(df1, df2, how='right', on='key')
pd.merge(df1, df2, how='outer', on='key')
pd.merge(df1, df2, how='inner', on='key')

7.3 join

df1.join(df2, how='left')

8. 时间序列处理

8.1 创建时间序列

# 创建日期范围
dates = pd.date_range('20230101', periods=6)

# 作为索引
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))

8.2 时间序列操作

# 重采样
df.resample('M').mean()

# 移动窗口
df.rolling(window=3).mean()

# 时间偏移
df.shift(1)  # 向后移动1天

8.3 时间提取

df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
df['day'] = df['date'].dt.day

9. 可视化

pandas集成了Matplotlib的绘图功能:

# 线图
df.plot()

# 柱状图
df.plot.bar()

# 直方图
df['Age'].plot.hist(bins=20)

# 箱线图
df.plot.box()

# 散点图
df.plot.scatter(x='Age', y='Salary')

# 饼图
df['City'].value_counts().plot.pie()

10. 性能优化

10.1 使用高效数据类型

# 使用category类型减少内存
df['City'] = df['City'].astype('category')

10.2 向量化操作

# 避免循环,使用向量化操作
df['New'] = df['A'] + df['B']

10.3 使用eval和query

# 更快的表达式计算
df.eval('A + B')

# 更快的查询
df.query('A > 0.5')

10.4 分块处理大数据

# 分块读取大文件
chunksize = 10000
for chunk in pd.read_csv('large_file.csv', chunksize=chunksize):
    process(chunk)

11. 实际案例

11.1 销售数据分析

# 读取数据
sales = pd.read_csv('sales_data.csv')

# 数据清洗
sales = sales.dropna()
sales['Date'] = pd.to_datetime(sales['Date'])

# 分析每月销售额
monthly_sales = sales.resample('M', on='Date')['Amount'].sum()

# 可视化
monthly_sales.plot(title='Monthly Sales')

11.2 客户细分

# 计算RFM指标
now = pd.to_datetime('today')
rfm = sales.groupby('CustomerID').agg({
    'Date': lambda x: (now - x.max()).days,  # Recency
    'InvoiceNo': 'count',                    # Frequency
    'Amount': 'sum'                          # Monetary
})

# 重命名列
rfm.columns = ['Recency', 'Frequency', 'Monetary']

# 分箱
rfm['R_Score'] = pd.qcut(rfm['Recency'], 5, labels=[5,4,3,2,1])
rfm['F_Score'] = pd.qcut(rfm['Frequency'], 5, labels=[1,2,3,4,5])
rfm['M_Score'] = pd.qcut(rfm['Monetary'], 5, labels=[1,2,3,4,5])

# 计算RFM总分
rfm['RFM_Score'] = rfm[['R_Score','F_Score','M_Score']].sum(axis=1)

12. 总结

pandas是Python数据分析的核心工具,提供了丰富的数据结构和高效的操作方法。本文介绍了pandas的基础用法,包括:

  1. 核心数据结构:Series和DataFrame
  2. 数据读写:支持多种文件格式
  3. 数据查看与选择:灵活的数据访问方式
  4. 数据清洗:处理缺失值、重复值等
  5. 数据操作:排序、分组、聚合等
  6. 数据合并:concat和merge
  7. 时间序列处理:强大的时间处理能力
  8. 数据可视化:简单的绘图功能
  9. 性能优化:提高处理效率的技巧
  10. 实际案例:展示pandas在实际问题中的应用

掌握这些基础内容后,可以进一步学习pandas的高级功能,如多级索引、自定义聚合函数、内存优化等,以应对更复杂的数据分析任务。

附录:常用函数速查表

功能 方法
读取CSV pd.read_csv()
读取Excel pd.read_excel()
查看前几行 df.head()
查看统计信息 df.describe()
选择列 df[‘col’] 或 df[[‘col1’,‘col2’]]
选择行 df.loc[] 或 df.iloc[]
条件筛选 df[df[‘col’] > value]
删除列 df.drop(‘col’, axis=1)
删除行 df.drop(index)
排序 df.sort_values()
分组 df.groupby()
聚合 df.agg()
合并 pd.concat() 或 pd.merge()
处理缺失值 df.dropna() 或 df.fillna()
处理重复值 df.drop_duplicates()
应用函数 df.apply()
保存数据 df.to_csv() 或 df.to_excel()

”`

注:由于篇幅限制,此文档约为3000字。要扩展到7650字,可以: 1. 为每个章节添加更多详细示例 2. 增加更多实际应用案例 3. 添加更多性能优化技巧 4. 增加常见问题解答部分 5. 添加与其他库(如NumPy、Matplotlib)的集成示例 6. 增加更复杂的数据操作示例 7. 添加错误处理和调试技巧 8. 扩展可视化部分,包含更多图表类型 9. 增加数据安全性和隐私处理内容 10. 添加版本差异和新功能说明

推荐阅读:
  1. expect的基础用法
  2. pandas基础操作

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

pandas

上一篇:如何解决多核浏览器切换问题

下一篇:CSS3的flex弹性盒模型布局的示例分析

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》