Python實現數據清洗的示例詳解

前言

Python實際針對數據分析的學習是庫,用庫來解決一系列的數據分析問題

去掉信息不全的用戶

描述

現有一個Nowcoder.csv文件,它記錄瞭牛客網的部分用戶數據,包含如下字段(字段與字段之間以逗號間隔):

  • Nowcoder_ID:用戶ID
  • Level:等級
  • Achievement_value:成就值
  • Num_of_exercise:刷題量
  • Graduate_year:畢業年份
  • Language:常用語言
  • Continuous_check_in_days:最近連續簽到天數
  • Number_of_submissions:提交代碼次數
  • Last_submission_time:最後一次提交題目日期

運營同學正在做用戶調研,為瞭保證調研的可靠性,想要去掉那些信息不全的用戶,即去掉有缺失數據的行,請你幫助他去掉後輸出全部數據。

輸入描述

數據集直接從當前目錄下的Nowcoder.csv文件中讀取。

輸出描述:

直接輸出清洗後的全部數據。

答案

import pandas as pd

Nowcoder = pd.read_csv('Nowcoder.csv', sep=',', dtype=object)
pd.set_option('display.width', 300)  # 設置字符顯示寬度
pd.set_option('display.max_rows', None)  # 設置顯示最大行
pd.set_option('display.max_columns', None)
print(Nowcoder[Nowcoder.isna() == False])

修補缺失的用戶數據

描述

現有一個Nowcoder.csv文件,它記錄瞭牛客網的部分用戶數據,包含如下字段(字段與字段之間以逗號間隔):

  • Nowcoder_ID:用戶ID
  • Level:等級
  • Achievement_value:成就值
  • Num_of_exercise:刷題量
  • Graduate_year:畢業年份
  • Language:常用語言
  • Continuous_check_in_days:最近連續簽到天數
  • Number_of_submissions:提交代碼次數
  • Last_submission_time:最後一次提交題目日期

運營同學拿到瞭這份用戶文件,但是由於系統BUG,出現瞭部分缺失的值,請你使用當前的最大年份填充缺失的畢業年份(“Graduate_year”),用Python填充缺失的常用語言(“Language”),用成就值的均值(四舍五入保留整數)填充缺失的成就值(“Achievement_value”)。

輸入描述

數據集直接從當前目錄下的Nowcoder.csv文件中讀取。

輸出描述:

輸出修改後的全部數據,不用處理輸出時年份與成就值的小數點問題。

答案

import pandas as pd

Nowcoder = pd.read_csv('Nowcoder.csv', sep=',')
pd.set_option('display.width', 300)  # 設置字符顯示寬度
pd.set_option('display.max_rows', None)  # 設置顯示最大行
pd.set_option('display.max_columns', None)
Nowcoder["Graduate_year"].fillna(Nowcoder["Graduate_year"].max())
Nowcoder["Language"].fillna("Python")
Nowcoder["Achievement_value"].fillna(Nowcoder["Achievement_value"].mean().round(0))
print(Nowcoder)

解決牛客網用戶重復的數據

描述

現有一個Nowcoder.csv文件,它記錄瞭牛客網的部分用戶數據,包含如下字段(字段與字段之間以逗號間隔):

  • Nowcoder_ID:用戶ID
  • Level:等級
  • Achievement_value:成就值
  • Num_of_exercise:刷題量
  • Graduate_year:畢業年份
  • Language:常用語言
  • Continuous_check_in_days:最近連續簽到天數
  • Number_of_submissions:提交代碼次數
  • Last_submission_time:最後一次提交題目日期

牛牛拿到這份文件的時候一臉懵逼,因為系統錯誤將很多相同用戶的數據輸出瞭多條,導致文件中有很多重復的行,請先檢查每一行是否重復,然後輸出刪除重復行後的全部數據。

輸入描述

數據集直接從當前目錄下的Nowcoder.csv文件中讀取。

輸出描述

先輸出每一行是否重復,再輸出去重後的文件全部數據

答案

import pandas as pd

Nowcoder = pd.read_csv('Nowcoder.csv', sep=',', dtype=object)
pd.set_option('display.width', 1000)
pd.set_option('display.max_rows', None)
print(Nowcoder.duplicated())
print(Nowcoder.drop_duplicates(0))

統一最後刷題日期的格式

描述

現有一個Nowcoder.csv文件,它記錄瞭牛客網的部分用戶數據,包含如下字段(字段與字段之間以逗號間隔):

  • Nowcoder_ID:用戶ID
  • Level:等級
  • Achievement_value:成就值
  • Num_of_exercise:刷題量
  • Graduate_year:畢業年份
  • Language:常用語言
  • Continuous_check_in_days:最近連續簽到天數
  • Number_of_submissions:提交代碼次數
  • Last_submission_time:最後一次提交題目日期

運營同學發現最後一次提交題目日期這一列有各種各樣的日期格式,這對於他分析用戶十分不友好,你能夠幫他輸出用戶ID、等級以及統一後的日期嗎?(日期格式統一為yyyy-mm-dd)

輸入描述

數據集直接從當前目錄下的Nowcoder.csv文件中讀取。

輸出描述

輸出用戶ID、等級與最後提交日期三列,包括行號。

答案

import pandas as pd
Nowcoder = pd.read_csv('Nowcoder.csv',sep=',',dtype=object)
Nowcoder['Last_submission_time'] = pd.to_datetime(Nowcoder["Last_submission_time"],format="%Y-%m-%d")
print(Nowcoder[['Nowcoder_ID','Level','Last_submission_time']])

將用戶的json文件轉換為表格形式

描述

現有一個Nowcoder.json文件,它記錄瞭牛客網的部分用戶數據,包含如下字段(字段與字段之間以逗號間隔):

  • Nowcoder_ID:用戶ID
  • Level:等級
  • Achievement_value:成就值
  • Graduate_year:畢業年份
  • Language:常用語言

如果你讀入瞭這個json文件,能將其轉換為pandas的DataFrame格式嗎?

輸入描述:

數據集直接從當前目錄下的Nowcoder.json文件中讀取。

輸出描述:

輸出轉換為DataFrame的全部數據,包括行號。

答案

import pandas as pd
import json

pd.set_option('display.width', 300)  # 設置字符顯示寬度
pd.set_option('display.max_rows', None)  # 設置顯示最大行
pd.set_option('display.max_columns', None)
with open('Nowcoder.json', 'r') as f:
    data = json.loads(f.read())
     
    df = pd.DataFrame.from_dict(data)
    print(df)

以上就是Python實現數據清洗的示例詳解的詳細內容,更多關於Python數據清洗的資料請關註WalkonNet其它相關文章!

推薦閱讀: