数据清洗是在数据分析和利用数据训练模型过程中不可或缺的一个步骤,也是数据科学家和程序员需要投入大量精力的一部分。
这些用于数据清洗的代码具有两个显著的优点:一是通过函数实现,无需调整参数即可直接使用;二是代码非常简洁,即使添加注释,最长的代码也仅有11行。
大家可以将这篇文章保存起来,作为实用的工具箱。
这些数据清洗代码涵盖了八个场景,具体包括:
在进行数据分析时,并不是所有的列都是有用的。使用df.drop
可以方便地删除指定的列。
python
def drop_multiple_col(col_names_list, df):
"""
目标:基于列名删除多个列
输入:列名列表,数据框
输出:更新后的数据框,已删除指定列
"""
df.drop(col_names_list, axis=1, inplace=True)
return df
随着数据集的增长,改变数据类型可以节省内存空间。
python
def change_dtypes(col_int, col_float, df):
"""
目标:改变数据类型以节省内存
输入:整型和浮点型列名列表,数据框
输出:更新后的数据框,占用更少内存
"""
df[col_int] = df[col_int].astype('int32')
df[col_float] = df[col_float].astype('float32')
一些机器学习模型要求变量采用数值格式。因此,需要先将分类变量转换为数值变量,同时也可以保留分类变量用于数据可视化。
python
def convert_cat2num(df):
"""
目标:将分类变量转换为数值变量
输入:数据框
输出:更新后的数据框
"""
num_encode = {
'col_1': {'YES': 1, 'NO': 0},
'col_2': {'WON': 1, 'LOSE': 0, 'DRAW': 0}
}
df.replace(num_encode, inplace=True)
如果你想快速了解每列缺失数据的数量,可以使用以下代码。这有助于你更好地掌握哪些列存在较多缺失值,并据此决定下一步的数据清洗和分析工作。
python
def check_missing_data(df):
"""
目标:检查数据框中的缺失数据(按降序显示)
输入:数据框
输出:缺失数据数量统计(按降序)
"""
return df.isnull().sum().sort_values(ascending=False)
有时候,新的字符或其他奇怪的符号可能会出现在字符串列中,这时可以使用df['col_1'].replace
轻松解决。
python
def remove_col_str(df):
"""
目标:删除数据框列中的字符串部分
输入:数据框
输出:更新后的数据框
"""
df['col_1'].replace(' ', '', regex=True, inplace=True)
df['col_1'].replace(' .*', '', regex=True, inplace=True)
在数据混乱时,字符串开头可能会出现空格。以下代码可以帮助你删除列中字符串开头的空格。
python
def remove_col_white_space(df):
"""
目标:删除字符串开头的空格
输入:数据框
输出:更新后的数据框
"""
df['col'].str.lstrip()
当你希望有条件地将两列通过字符串连接在一起时,这段代码会很有帮助。例如,你可以在第一列的结尾处设置特定字母,然后将它们与第二列连接在一起。根据需要,可以在连接完成后删除这些字母。
python
def concat_col_str_condition(df):
"""
目标:有条件地将两列用字符串连接在一起
输入:数据框
输出:更新后的数据框
"""
mask = df['col_1'].str.endswith('pil', na=False)
col_new = df[mask]['col_1'] + df[mask]['col_2']
col_new.replace('pil', ' ', regex=True, inplace=True)
在处理时间序列数据时,经常会遇到以字符串形式表示的时间戳列。这意味着你需要将这些字符串转换为日期时间格式(或其他根据需求指定的格式),以便进行有意义的数据分析。
python
def convert_str_datetime(df):
"""
目标:将字符串格式的时间戳转换为日期时间格式
输入:数据框
输出:更新后的数据框,具有新的日期时间格式
"""
df.insert(loc=2, column='timestamp', value=pd.to_datetime(df['transdate'], format='%Y-%m-%d %H:%M:%S.%f'))
希望以上内容能帮助你更好地理解和应用数据清洗技巧。