Python數據預處理之清洗


使用Pandas進行數據預處理

 數據清洗中不是每一步都是必須的,按實際需求操作。

內容目錄

1、數據的生成與導入

2、數據信息查看

    2.1、查看整體數據信息

    2.2、查看數據維度、列名稱、數據格式

    2.3、查看數據特殊值和數值

        2.3.1、查看空值

        2.3.2、查看唯一值

       2.3.3、查看數值

       2.3.4、查看前后數據

3、數據清洗和預處理等步驟

    3.1、空值處理

    3.2、空格處理

    3.3、字符串大小寫處理

    3.4、更改數據類型和列名稱

    3.5、重復值處理

    3.6、數據替換

    3.7、數據合並和排序

    3.8、數據分組

4、數據提取和篩選

    4.1、按位置提取

    4.2、按標簽提取

    4.3、按條件提取

    4.4、數據篩選

5、數據匯總與統計量計算

    5.1、groupby用法

    5.2、數據透視表用法

    5.3、數據采樣

    5.4、數據求均值、方差等

    5.5、數據求相關系數等

6、數據存儲

    6.1、存儲到Execl

    6.2、存儲到CSV

 

1.  讀取數據

import pandas as pd

data = pd.read_excel(io='D:\A\data.xlsx')

2.  數據信息

print(data.shape)    # 查看數據規模(維度)
print(data.dtypes)    # 查看各變量的數據類型
print(data.info())    # 查看數據整體信息
print(data.describe())   # 查看數據描述
print(data.isnull())    # 查看空值
print(data.columns)    # 列名
print(data['Age'].unique())    #查看Age唯一值
print(data.values)   # 查看數據表值
print(data.head(5))   #查看前5行
print(data.tail(5))    #查看后5行

 

3. 清洗

data.dropna(how='any', inplace=True)  # 空值處理,刪除
data.fillna(0)   # 空值處理,填充:方法多種
data['name'] = data['name'].map(str.strip)  # 空格處理
data['name'].str.lower()   # 大小寫轉換
data['age'].astype('int')    # 更改數據類型
data.rename(columns={'name':'名字', 'Age':'年齡"})   # 更改列名
data['name'].drop_duplicates(keep='last')  # 刪除重復值,保留最后一個
data['Embark'].replace('C', 'c')    # 數據替換

 

3.1 重復數據的處理

# 判斷數據中是否存在重復值
data.duplicated().any

# 刪除重復值,會刪除除第一條后的,默認對所有變量判斷
data.drop_duplicates()  
# 指定變量判斷
data.drop_duplicates(subset=['name', 'age'],keep='first', inplace=False)  # first保留第一個,inplace=True對原數據修改

 

4. 缺失值(NA)識別與處理

# 判斷各變量中是否存在缺失值
data.isnull().any(axis=0)

# 各變量中缺失值的數量
data.isnull().sum(axis=0)

# 各變量中缺失值的比例
data.isnull().sum(axis=0)/data.shape[0]

# 判斷數據行中是否存在缺失值
data.isnull().any(axis=1).any() # 第二個any表示所有行

 

4.1 直接去除

# 列變量缺失非常高的(70%),刪除該變量
data.drop(labes='name', axis=1,inplace=True)  # 刪除name字段
# 刪除name變量中對應的缺失值
data = data.drop(labels=data.index[['name'].isnull()],axis=0)

# 行內
# 缺失變量的將該行刪除(缺失行的比例不高於5%)
# 變量缺失非常高的(70%),將該行刪除

 

4.2 對缺失值進行填充(用中位數或平均數...)

data.fillna(value={'age':data['age'].mode()[0],  # 使用眾數替換
                 'num':data['num'].mean()   # 使用平均值替換
                 },
                inplace=True
               )

 

data.dropna() #直接刪除含有缺失值的行
data.dropna(axis = 1) #直接刪除含有缺失值的列
data.dropna(how = 'all') #只刪除全是缺失值的行
data.dropna(thresh = 3) #保留至少有3個非空值的行
data.dropna(subset = [u'血型 ']) #判斷特定的列,若該列含有缺失值則刪除缺失值所在的行

5. 異常數據的識別和處理

6. 排序

data.sort_valurs(by=['Age'])   # 按字段排序
data.sort_index()   #按索引排序

 

7. 合並merge

# 合並方式: inner, outer, left, right
# 組合方式: left_on+right_on、left_on+right_index、left_index+right_on、left_index+right_index

# merge參數
pd.merge(left, right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=True, suffixes=('_x', '_y'), copy=True, indicator=False)

# 例子
data1 = pd.DataFrame({'lkey': list('abcdefg'), 'data1': range(7)})
data2 = pd.DataFrame({'rkey': list('agsdgf'), 'data2':range(6)})
print(pd.merge(data1, data2, left_on='lkey', right_on='rkey'))

 

數據分組

data['group'] = np.where(data['fa']>60, 'high', 'low')
data[['fa', 'group']]

 

 

數據匯總與統計量計算

data.groupby(['columns'])   # 按字段分組

pd.pivot_table(data, values=None, index=None, columns=None, aggfunc='mean', fill_value=None, 
margins=False, dropna=True, margins_name='All')   # 數據透視表

data.sample(n=2)
data.describe()  # 描述統計量
data['a'].cov(data['b']) # 計算兩字段的協方差
data.corr()   # 相關性

 

計算每行指定屬性的平均值,作為新的一列加入到原數據中。

data.eval('avg = (Chinese + Math +English)/3.0', inplace=True)

 

8. 保存

8.1 保存到excel

data.to_excel('data.xlsx', sheet_name='a')

8.2 保存到csv

data.to_csv('data1.csv')

8.2 保存到數據庫

 

 

 

 

 

 

 

 

其他:

Pandas時間序列重采樣(resample)方法中closed、label的作用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM