文章概要
本文详细介绍 Pandas 的数据操作基础知识,包括:
- 数据读取与写入
- 数据选择与过滤
- 数据清洗
- 数据排序
- 实际应用示例
数据读取与写入
CSV 文件操作
# 读取 CSV 文件
df = pd.read_csv('data.csv')# 写入 CSV 文件
df.to_csv('output.csv', index=False)# 读取特定列
df = pd.read_csv('data.csv', usecols=['列1', '列2'])# 处理编码问题
df = pd.read_csv('data.csv', encoding='utf-8')
Excel 文件操作
# 读取 Excel 文件
df = pd.read_excel('data.xlsx', sheet_name='Sheet1')# 写入 Excel 文件
df.to_excel('output.xlsx', sheet_name='Sheet1', index=False)# 读取多个工作表
excel_file = pd.ExcelFile('data.xlsx')
df1 = pd.read_excel(excel_file, 'Sheet1')
df2 = pd.read_excel(excel_file, 'Sheet2')
JSON 文件操作
# 读取 JSON 文件
df = pd.read_json('data.json')# 写入 JSON 文件
df.to_json('output.json')# 处理嵌套 JSON
df = pd.json_normalize(data)
SQL 数据库操作
# 读取 SQL 数据
import sqlite3
conn = sqlite3.connect('database.db')
df = pd.read_sql_query("SELECT * FROM table_name", conn)# 写入 SQL 数据
df.to_sql('table_name', conn, if_exists='replace')
数据选择与过滤
列选择
# 选择单列
df['列名']# 选择多列
df[['列1', '列2']]# 使用 loc 选择列
df.loc[:, '列名']
df.loc[:, ['列1', '列2']]
行选择
# 使用 iloc 选择行
df.iloc[0] # 第一行
df.iloc[0:5] # 前五行# 使用 loc 选择行
df.loc[0] # 索引为0的行
df.loc[0:5] # 索引从0到5的行
条件过滤
# 简单条件
df[df['列名'] > 100]# 多条件组合
df[(df['列1'] > 100) & (df['列2'] == '值')]# 使用 isin
df[df['列名'].isin(['值1', '值2'])]
数据清洗
处理缺失值
# 检查缺失值
df.isnull()
df.isnull().sum()# 删除缺失值
df.dropna() # 删除任何包含缺失值的行
df.dropna(axis=1) # 删除任何包含缺失值的列
df.dropna(subset=['列1', '列2']) # 删除指定列包含缺失值的行# 填充缺失值
df.fillna(0) # 用0填充
df.fillna(method='ffill') # 用前一个值填充
df.fillna(method='bfill') # 用后一个值填充
df.fillna({'列1': 0, '列2': '未知'}) # 对不同列使用不同的填充值
处理重复值
# 检查重复值
df.duplicated()# 删除重复值
df.drop_duplicates() # 删除所有重复行
df.drop_duplicates(subset=['列1', '列2']) # 基于特定列删除重复行
数据转换
# 数据类型转换
df['列名'] = df['列名'].astype('int')
df['列名'] = df['列名'].astype('float')
df['列名'] = df['列名'].astype('str')# 字符串处理
df['列名'] = df['列名'].str.upper()
df['列名'] = df['列名'].str.lower()
df['列名'] = df['列名'].str.strip()
数据标准化
# 最小-最大标准化
df['列名'] = (df['列名'] - df['列名'].min()) / (df['列名'].max() - df['列名'].min())# Z-score标准化
df['列名'] = (df['列名'] - df['列名'].mean()) / df['列名'].std()
数据排序
按列排序
# 升序排序
df.sort_values('列名')# 降序排序
df.sort_values('列名', ascending=False)# 多列排序
df.sort_values(['列1', '列2'], ascending=[True, False])
自定义排序
# 使用自定义排序顺序
custom_order = ['低', '中', '高']
df['列名'] = pd.Categorical(df['列名'], categories=custom_order, ordered=True)
df.sort_values('列名')
实际应用示例
示例1:销售数据清洗
# 创建示例数据
sales_data = pd.DataFrame({'日期': ['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04'],'产品': ['A', 'B', 'A', 'C'],'销量': [100, None, 150, 80],'单价': [10.5, 15.0, 10.5, 20.0]
})# 数据清洗
# 1. 处理缺失值
sales_data['销量'] = sales_data['销量'].fillna(sales_data['销量'].mean())# 2. 计算销售额
sales_data['销售额'] = sales_data['销量'] * sales_data['单价']# 3. 按产品分组统计
product_stats = sales_data.groupby('产品').agg({'销量': 'sum','销售额': 'sum'
}).round(2)print(product_stats)
示例2:学生成绩分析
# 创建示例数据
grades = pd.DataFrame({'学号': ['001', '002', '003', '004', '005'],'姓名': ['张三', '李四', '王五', '赵六', '钱七'],'语文': [85, 92, 78, 88, 95],'数学': [92, 88, 95, 82, 90],'英语': [88, 85, 90, 87, 92]
})# 数据处理
# 1. 计算平均分
grades['平均分'] = grades[['语文', '数学', '英语']].mean(axis=1).round(2)# 2. 按平均分排序
grades_sorted = grades.sort_values('平均分', ascending=False)# 3. 添加排名
grades_sorted['排名'] = range(1, len(grades_sorted) + 1)print(grades_sorted)
总结
数据操作基础部分涵盖了:
- 各种文件格式的读写操作
- 数据选择和过滤的方法
- 数据清洗和转换技术
- 数据排序和自定义排序
- 实际应用示例
掌握这些基础数据操作技能对于进行数据分析至关重要。在实际工作中,这些操作往往是数据分析的第一步,为后续的深入分析打下基础。建议多加练习这些基础操作,熟悉各种方法的适用场景,提高数据处理效率。