数据预处理相关操作:
删除重复值:
df.drop_duplicates(inplace=True) # 删除数据框df中的重复行 inplace表示是否在源数据本身上修改
取出某些行和列:
# axis=1 表示列 axis=0 表示行
df.drop(['column_name1', 'column_name2'], axis=1, inplace=True) # 删除指定的列
处理缺失值:
df.isnull(inplace=True) # 检查数据框df中的缺失值
df.dropna() # 删除包含缺失值的行或列
df.fillna(value) # 将缺失值填充为指定的值value
数据类型转化:
df['column_name'] = df['column_name'].astype(new_type) # 将列的数据类型转换为new_type
数据列名重命名:
df.rename(columns={'old_column_name': 'new_column_name'}, inplace=True) # 重命名列名
数据填充:
df.fillna(method='ffill', inplace=True) # 使用前一个非缺失值填充缺失值
df.fillna(method='bfill', inplace=True) # 使用后一个非缺失值填充缺失值
数据筛选:
df[df['column_name'] > threshold] # 根据条件筛选数据框df中的行
df.loc[row_indexer, column_indexer] # 根据行和列的索引值进行数据筛选
数据排序:
df.sort_values(by='column_name', ascending=True, inplace=True) # 按指定列的值进行升序排序
数据合并:
df_merged = pd.concat([df1, df2], axis=0) # 沿行方向合并两个数据框
数据分组:
grouped_df = df.groupby('group_column')['numeric_column'].mean() # 按分组列计算数值列的平均值
异常值处理:
df[df['column_name'] < lower_bound] = lower_bound # 将低于下限的异常值替换为下限值
df[df['column_name'] > upper_bound] = upper_bound # 将高于上限的异常值替换为上限值
文本数据清洗:
df['column_name'] = df['column_name'].str.strip() # 去除文本数据中的首尾空格
df['column_name'] = df['column_name'].str.lower() # 将文本数据转换为小写
df['column_name'] = df['column_name'].str.replace(pattern, replacement) # 使用正则表达式替换文本数据
案例:
import pandas as pd
# 创建示例数据
data = {
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Age': [25, 30, None, 35, 40],
'Gender': ['Female', 'Male', 'Male', None, 'Female'],
'Salary': [5000, 6000, 4500, None, 5500]
}
df = pd.DataFrame(data)
# 删除重复值
df.drop_duplicates(inplace=True)
# 处理缺失值
df.dropna(inplace=True) # 删除包含缺失值的行
df.fillna({'Age': df['Age'].mean(), 'Salary': df['Salary'].median()}, inplace=True) # 填充缺失值为均值和中位数
# 数据类型转换
df['Age'] = df['Age'].astype(int)
df['Salary'] = df['Salary'].astype(float)
# 数据筛选
df_filtered = df[df['Age'] > 30] # 筛选年龄大于30岁的数据
# 异常值处理
lower_bound = 3000
upper_bound = 10000
df['Salary'] = df['Salary'].clip(lower_bound, upper_bound) # 将薪资超出范围的异常值替换为范围边界值
# 文本数据清洗
df['Name'] = df['Name'].str.strip() # 去除姓名中的首尾空格
df['Name'] = df['Name'].str.lower() # 将姓名转换为小写
# 显示处理后的数据
print(df)