2.1 读取 CSV 和 Excel 文件
在这一节中,我们将深入了解如何使用 Pandas 读取 CSV 和 Excel 文件,这是数据分析的基石。
2.1.1 基础知识
Pandas 提供了非常直观的函数来读取 CSV 和 Excel 文件,这些函数是 read_csv()
和 read_excel()
。在使用这些函数之前,你需要了解几个重要的参数:
filepath_or_buffer
: 文件的路径。sep
: CSV 文件中用于分隔字段的字符,默认为 ‘,’。header
: 用于指定哪一行作为列名,默认为 0,表示第一行。index_col
: 用于指定哪一列作为索引。usecols
: 指定需要读取的列。
2.1.2 重点案例:电商销售数据分析
假设你有一个电商平台的日销售数据 CSV 文件和产品信息的 Excel 文件,你需要分析产品销量。
步骤1:数据准备
电商销售数据(sales_data.csv)
date,product_id,quantity_sold 2024-01-01,1001,5 2024-01-01,1002,3 2024-01-02,1001,6 2024-01-02,1003,2
产品信息(product_info.xlsx)
product_id | product_name | price |
1001 | Product A | 20.5 |
1002 | Product B | 35.0 |
1003 | Product C | 8.0 |
步骤2:数据导入
import pandas as pd # 读取 CSV 文件 sales_data = pd.read_csv('sales_data.csv', sep=',', header=0) # 读取 Excel 文件 product_data = pd.read_excel('product_info.xlsx')
步骤3:销量分析
# 合并销售数据和产品信息 combined_data = pd.merge(sales_data, product_data, on='product_id') # 分析每个产品的销量 sales_summary = combined_data.groupby('product_name').sum()['quantity_sold'] print(sales_summary)
2.1.3 拓展案例一:金融市场数据分析
分析某股票在过去一年的日交易数据,该数据以 CSV 格式提供。
步骤1:数据准备
股票市场数据(stock_data.csv)
date,open,high,low,close,volume 2024-01-01,100,102,99,101,5000 2024-01-02,101,103,100,102,6000 2024-01-03,102,104,101,103,5500 2024-01-04,103,105,102,104,4500
步骤2:数据导入
# 读取股票市场数据 stock_data = pd.read_csv('stock_data.csv', index_col='date', parse_dates=True)
步骤3:趋势分析
# 计算简单移动平均值 stock_data['SMA'] = stock_data['close'].rolling(window=15).mean() # 绘制趋势图 stock_data[['close', 'SMA']].plot(title='Stock Trends')
2.1.4 拓展案例二:医疗健康数据处理
假设你有一份包含病人信息的 Excel 文件,需要进行数据清洗和分析。
步骤1:数据准备
医疗数据(patient_data.xlsx)
patient_id | age | weight | height | diagnosis |
1 | 30 | 70 | 175 | A |
2 | 45 | 80 | 180 | B |
3 | 40 | 75 | - | A |
4 | - | 85 | 170 | C |
步骤2:数据导入
# 读取病人数据 patient_data = pd.read_excel('patient_data.xlsx')
步骤2:数据清洗
# 删除缺失值过多的列 patient_data_cleaned = patient_data.dropna(axis=1, thresh=0.8 * len(patient_data)) # 填充缺失值 patient_data_cleaned = patient_data_cleaned.fillna(method='ffill')
通过这些案例,你可以看到 Pandas 在读取和处理 CSV 和 Excel 文件方面的强大能力。无论是处理商业销售数据,分析股票市场趋势,还是清洗医疗数据,Pandas 都能轻松胜任。
2.2 导出数据到不同格式
在这一节中,我们将深入了解如何使用 Pandas 将数据导出到不同的格式,这对于数据共享和报告非常重要。
2.2.1 基础知识
Pandas 提供了多种函数来导出数据,包括但不限于:
to_csv()
: 将数据导出为 CSV 文件。to_excel()
: 将数据导出为 Excel 文件。to_json()
: 将数据导出为 JSON 格式。to_sql()
: 将数据导出到 SQL 数据库。
导出时,你可以指定各种参数来格式化输出,如指定分隔符、是否包含索引、选择导出的列等。
2.2.2 重点案例:分析报告导出
假设你完成了对某公司销售数据的分析,并需要将结果导出为不同格式以供不同部门使用。
步骤1:准备数据
import pandas as pd # 示例销售数据 data = { 'month': ['January', 'February', 'March'], 'sales': [200, 240, 310], 'expenses': [150, 190, 200] } df = pd.DataFrame(data)
步骤2:导出数据
# 导出为 CSV df.to_csv('monthly_sales_report.csv', index=False) # 导出为 Excel df.to_excel('monthly_sales_report.xlsx', index=False) # 导出为 JSON df.to_json('monthly_sales_report.json')
2.2.3 拓展案例一:研究数据集的共享
你的研究团队需要将收集的环境数据共享给国际合作伙伴。
步骤1:准备数据
# 示例环境数据 env_data = { 'location': ['Location1', 'Location2'], 'temperature': [22, 19], 'humidity': [80, 70] } env_df = pd.DataFrame(env_data)
步骤2:导出数据
# 导出为 Excel env_df.to_excel('environmental_data.xlsx') # 导出为 JSON env_df.to_json('environmental_data.json')
2.2.4 拓展案例二:金融市场日报
你负责每日向客户提供金融市场的摘要报告。
步骤1:准备数据
# 示例金融市场数据 fin_data = { 'date': ['2024-01-01', '2024-01-02'], 'open': [100, 102], 'close': [105, 104] } fin_df = pd.DataFrame(fin_data)
步骤2:导出数据
# 导出为 CSV fin_df.to_csv('financial_market_summary.csv', index=False) # 导出为 HTML(便于嵌入网页或邮件) fin_df.to_html('financial_market_summary.html')
通过这些案例,你可以看到 Pandas 在导出数据方面的灵活性。无论是准备销售报告、共享研究数据还是生成金融市场摘要,Pandas 让数据导出变得既简单又高效。
2.3 高级数据导入技巧
在这一节中,我们将探索 Pandas 中的一些高级数据导入技巧,这些技巧对于处理大型数据集和复杂数据场景非常有用。
2.3.1 基础知识
- 分块读取(Chunking): 对于大型文件,一次性读入可能会消耗大量内存。Pandas 允许分块读取数据,使用
chunksize
参数。 - 数据类型指定(Dtype Specification): 在导入数据时指定列的数据类型,可以提高效率并减少内存使用。
- 日期解析(Date Parsing): 在导入时解析日期,可以使用
parse_dates
参数。 - 处理缺失值(Handling Missing Data): 在导入时处理缺失值,可以使用
na_values
参数。
2.3.2 重点案例:大型股市数据分析
假设你需要分析一个非常大的股市交易数据集。
步骤1:准备数据
import pandas as pd import numpy as np # 生成大型数据集的模拟 dates = pd.date_range('20240101', periods=10000) data = pd.DataFrame({ 'date': dates, 'price': np.random.randn(10000) * 100 + 100, 'volume': np.random.randint(100, 10000, size=10000) }) data.to_csv('large_stock_data.csv', index=False)
步骤2:分块读取数据
chunk_size = 1000 for chunk in pd.read_csv('large_stock_data.csv', chunksize=chunk_size): # 在这里处理每个块的数据 print(chunk.head())
2.3.3 拓展案例一:处理复杂的电力消耗数据
假设你需要从一个包含复杂格式和多种数据类型的电力消耗记录文件中导入数据。
步骤1:准备数据
# 生成电力消耗数据的模拟 hours = pd.date_range('2024-01-01', '2024-01-31', freq='H') power_data = pd.DataFrame({ 'timestamp': hours, 'consumption': np.random.randn(len(hours)) * 50 + 500, 'status': np.random.choice(['OK', 'HIGH', 'LOW'], len(hours)) }) power_data.to_csv('power_consumption.csv', index=False)
步骤2:指定数据类型和日期解析
power_df = pd.read_csv( 'power_consumption.csv', parse_dates=['timestamp'], dtype={'status': 'category'} ) print(power_df.info())
2.3.4 拓展案例二:国际航班数据导入与转换
你的任务是处理一个国际航班时间表数据集,其中包含不同格式的日期和时间。
步骤1:准备数据
# 生成航班数据的模拟 flights_data = pd.DataFrame({ 'flight': ['FL001', 'FL002', 'FL003'], 'departure': ['2024-01-01 08:00:00', '2024-01-01 09:00:00', '2024-01-01 10:00:00'], 'arrival': ['2024-01-01 12:00:00', '2024-01-01 13:00:00', '2024-01-01 14:00:00'] }) flights_data.to_csv('flights_schedule.csv', index=False)
步骤2:日期时间解析
flights_df = pd.read_csv( 'flights_schedule.csv', parse_dates=['departure', 'arrival'] ) print(flights_df.info())
通过这些案例,你可以看到 Pandas 在处理大型数据集、复杂数据格式以及特殊数据类型时的能力。无论是分析大型股市数据,处理电力消耗记录,还是导入国际航班时间表,使用 Pandas 的高级导入技巧可以使工作更加高效。