乐趣区

关于python:8个Python数据清洗代码拿来即用

大家好!

不论你承不承认,数据荡涤着实不是一件简略的工作,大多数状况下这项工作是非常耗时而乏味的,但它又是非常重要的。

如果你经验过数据荡涤的过程,你就会明确我的意思。而这正是撰写这篇文章的目标——让读者更轻松地进行数据荡涤工作。

事实上,我在不久前意识到,在进行数据荡涤时,有一些数据具备类似的模式。也正是从那时起,我开始整顿并编译了一些数据荡涤代码(见下文),我认为这些代码也实用于其它的常见场景。

因为这些常见的场景波及到不同类型的数据集,因而本文更加侧重于展现和解释这些代码能够用于实现哪些工作,以便读者更加不便地应用它们。

数据荡涤小工具箱

在上面的代码片段中,数据荡涤代码被封装在了一些函数中,代码的目标非常直观。你能够间接应用这些代码,无需将它们嵌入到须要进行大量参数批改的函数中。

1. 删除多列数据

def drop_multiple_col(col_names_list, df): 
    '''
    AIM    -> Drop multiple columns based on their column names 

    INPUT  -> List of column names, df

    OUTPUT -> updated df with dropped columns 
    ------
    '''
    df.drop(col_names_list, axis=1, inplace=True)
    return df

有时,并不是所有列的数据都对咱们的数据分析工作有用。因而,「df.drop」能够不便地删掉你选定的列。

2. 转换 Dtypes

def change_dtypes(col_int, col_float, df): 
    '''
    AIM    -> Changing dtypes to save memory

    INPUT  -> List of column names (int, float), df

    OUTPUT -> updated df with smaller memory  
    ------
    '''df[col_int] = df[col_int].astype('int32')
    df[col_float] = df[col_float].astype('float32')

当咱们面对更大的数据集时,咱们须要对「dtypes」进行转换,从而节俭内存。

3. 将分类变量转换为数值变量

def convert_cat2num(df):
    # Convert categorical variable to numerical variable
    num_encode = {'col_1' : {'YES':1, 'NO':0},
                  'col_2'  : {'WON':1, 'LOSE':0, 'DRAW':0}}  
    df.replace(num_encode, inplace=True)  

有一些机器学习模型要求变量是以数值模式存在的。这时,咱们就须要将分类变量转换成数值变量而后再将它们作为模型的输出。对于数据可视化工作来说,我倡议大家保留分类变量,从而让可视化后果有更明确的解释,便于了解。

4. 查看缺失的数据

def check_missing_data(df):
    # check for any missing data in the df (display in descending order)
    return df.isnull().sum().sort_values(ascending=False)

如果你想要查看每一列中有多少缺失的数据,这可能是最快的办法。这种办法能够让你更分明地晓得哪些列有更多的缺失数据,帮忙你决定接下来在数据荡涤和数据分析工作中应该采取怎么的口头。

5. 删除列中的字符串

def remove_col_str(df):
    # remove a portion of string in a dataframe column - col_1
    df['col_1'].replace('\n', '', regex=True, inplace=True)

    # remove all the characters after &# (including &#) for column - col_1
    df['col_1'].replace('&#.*', '', regex=True, inplace=True)

有时你可能会看到一行新的字符,或在字符串列中看到一些奇怪的符号。你能够很容易地应用 df[‘col_1’].replace 来解决该问题,其中「col_1」是数据帧 df 中的一列。

6. 删除列中的空格

def remove_col_white_space(df):
    # remove white space at the beginning of string 
    df[col] = df[col].str.lstrip()

当数据非常凌乱时,很多意想不到的状况都会产生。在字符串的结尾有一些空格是很常见的。因而,当你想要删除列中字符串结尾的空格时,这种办法很实用。

7. 将两列字符串数据(在肯定条件下)拼接起来

def concat_col_str_condition(df):
    # concat 2 columns with strings if the last 3 letters of the first column are 'pil'
    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)  # replace the'pil' with emtpy space

当你心愿在肯定条件下将两列字符串数据组合在一起时,这种办法很有用。例如,你心愿当第一列以某些特定的字母结尾时,将第一列和第二列数据拼接在一起。依据你的须要,还能够在拼接工作实现后将结尾的字母删除掉。

8. 转换工夫戳(从字符串类型转换为日期「DateTime」格局)

def convert_str_datetime(df): 
    '''
    AIM    -> Convert datetime(String) to datetime(format we want)

    INPUT  -> df

    OUTPUT -> updated df with new datetime format 
    ------
    '''df.insert(loc=2, column='timestamp', value=pd.to_datetime(df.transdate, format='%Y-%m-%d %H:%M:%S.%f'))

在解决工夫序列数据时,你可能会遇到字符串格局的工夫戳列。这意味着咱们可能不得不将字符串格局的数据转换为依据咱们的需要指定的日期「datetime」格局,以便应用这些数据进行有意义的剖析和展现。

退出移动版