本文详细介绍 Pandas 的数据操作基础知识,包括:
# 读取 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 文件
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 文件
df = pd.read_json('data.json')
# 写入 JSON 文件
df.to_json('output.json')
# 处理嵌套 JSON
df = pd.json_normalize(data)
# 读取 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('列名')
# 创建示例数据
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)
# 创建示例数据
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)
数据操作基础部分涵盖了:
掌握这些基础数据操作技能对于进行数据分析至关重要。在实际工作中,这些操作往往是数据分析的第一步,为后续的深入分析打下基础。建议多加练习这些基础操作,熟悉各种方法的适用场景,提高数据处理效率。