您好,登录后才能下订单哦!
# 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
Series是pandas中最基本的对象,类似于一维数组,但带有标签(索引)。
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)
# 访问元素
print(s2['a']) # 输出1
# 切片
print(s1[1:4])
# 数学运算
print(s1 * 2)
# 条件筛选
print(s1[s1 > 4])
DataFrame是pandas中最重要的数据结构,类似于电子表格或SQL表。
# 从字典创建
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')
# 查看前几行
print(df.head())
# 查看基本信息
print(df.info())
# 查看统计摘要
print(df.describe())
# 查看列名
print(df.columns)
# 查看索引
print(df.index)
pandas支持多种数据格式的读取:
df = pd.read_csv('data.csv')
# 常用参数
df = pd.read_csv('data.csv', sep=',', header=0, index_col=0, encoding='utf-8')
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')
df = pd.read_json('data.json')
import sqlite3
conn = sqlite3.connect('database.db')
df = pd.read_sql('SELECT * FROM table_name', conn)
df.to_csv('output.csv', index=False)
df.to_excel('output.xlsx', sheet_name='Sheet1', index=False)
df.to_json('output.json')
df.to_sql('table_name', conn, if_exists='replace', index=False)
# 查看前n行
df.head(5)
# 查看后n行
df.tail(3)
# 随机查看n行
df.sample(2)
# 查看形状
df.shape
# 查看数据类型
df.dtypes
# 查看唯一值
df['column'].unique()
# 查看值计数
df['column'].value_counts()
# 选择单列
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'])]
df.query('Age > 25 and City == "Paris"')
# 检测缺失值
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') # 前向填充
# 检测重复行
df.duplicated()
# 删除重复行
df.drop_duplicates()
# 基于特定列删除重复
df.drop_duplicates(subset=['Name'])
# 查看数据类型
df.dtypes
# 转换数据类型
df['Age'] = df['Age'].astype('float64')
# 转换为日期时间
df['Date'] = pd.to_datetime(df['Date'])
# 转换为分类数据
df['City'] = df['City'].astype('category')
df.rename(columns={'old_name': 'new_name'}, inplace=True)
# 批量重命名
df.columns = ['col1', 'col2', 'col3']
df.reset_index(drop=True, inplace=True)
# 添加新列
df['New_Column'] = df['Age'] * 2
# 删除列
df.drop('New_Column', axis=1, inplace=True)
# 按单列排序
df.sort_values('Age', ascending=False)
# 按多列排序
df.sort_values(['City', 'Age'], ascending=[True, False])
# 简单分组
df.groupby('City').mean()
# 多列分组
df.groupby(['City', 'Age']).sum()
# 多种聚合函数
df.groupby('City').agg({'Age': ['mean', 'min', 'max'], 'Salary': 'sum'})
# 应用简单函数
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)
pd.pivot_table(df, values='Age', index='City', columns='Gender', aggfunc='mean')
# 垂直合并
pd.concat([df1, df2], axis=0)
# 水平合并
pd.concat([df1, df2], axis=1)
# 类似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')
df1.join(df2, how='left')
# 创建日期范围
dates = pd.date_range('20230101', periods=6)
# 作为索引
df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))
# 重采样
df.resample('M').mean()
# 移动窗口
df.rolling(window=3).mean()
# 时间偏移
df.shift(1) # 向后移动1天
df['year'] = df['date'].dt.year
df['month'] = df['date'].dt.month
df['day'] = df['date'].dt.day
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()
# 使用category类型减少内存
df['City'] = df['City'].astype('category')
# 避免循环,使用向量化操作
df['New'] = df['A'] + df['B']
# 更快的表达式计算
df.eval('A + B')
# 更快的查询
df.query('A > 0.5')
# 分块读取大文件
chunksize = 10000
for chunk in pd.read_csv('large_file.csv', chunksize=chunksize):
process(chunk)
# 读取数据
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')
# 计算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)
pandas是Python数据分析的核心工具,提供了丰富的数据结构和高效的操作方法。本文介绍了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. 添加版本差异和新功能说明
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。