Python實現數據清洗的示例詳解
前言
Python實際針對數據分析的學習是庫,用庫來解決一系列的數據分析問題
去掉信息不全的用戶
描述
現有一個Nowcoder.csv文件,它記錄了??途W的部分用戶數據,包含如下字段(字段與字段之間以逗號間隔):
- Nowcoder_ID:用戶ID
- Level:等級
- Achievement_value:成就值
- Num_of_exercise:刷題量
- Graduate_year:畢業(yè)年份
- Language:常用語言
- Continuous_check_in_days:最近連續(xù)簽到天數
- 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文件,它記錄了??途W的部分用戶數據,包含如下字段(字段與字段之間以逗號間隔):
- Nowcoder_ID:用戶ID
- Level:等級
- Achievement_value:成就值
- Num_of_exercise:刷題量
- Graduate_year:畢業(yè)年份
- Language:常用語言
- Continuous_check_in_days:最近連續(xù)簽到天數
- Number_of_submissions:提交代碼次數
- Last_submission_time:最后一次提交題目日期
運營同學拿到了這份用戶文件,但是由于系統(tǒng)BUG,出現了部分缺失的值,請你使用當前的最大年份填充缺失的畢業(yè)年份(“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)
解決??途W用戶重復的數據
描述
現有一個Nowcoder.csv文件,它記錄了牛客網的部分用戶數據,包含如下字段(字段與字段之間以逗號間隔):
- Nowcoder_ID:用戶ID
- Level:等級
- Achievement_value:成就值
- Num_of_exercise:刷題量
- Graduate_year:畢業(yè)年份
- Language:常用語言
- Continuous_check_in_days:最近連續(xù)簽到天數
- Number_of_submissions:提交代碼次數
- Last_submission_time:最后一次提交題目日期
牛牛拿到這份文件的時候一臉懵逼,因為系統(tǒng)錯誤將很多相同用戶的數據輸出了多條,導致文件中有很多重復的行,請先檢查每一行是否重復,然后輸出刪除重復行后的全部數據。
輸入描述
數據集直接從當前目錄下的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))
統(tǒng)一最后刷題日期的格式
描述
現有一個Nowcoder.csv文件,它記錄了牛客網的部分用戶數據,包含如下字段(字段與字段之間以逗號間隔):
- Nowcoder_ID:用戶ID
- Level:等級
- Achievement_value:成就值
- Num_of_exercise:刷題量
- Graduate_year:畢業(yè)年份
- Language:常用語言
- Continuous_check_in_days:最近連續(xù)簽到天數
- Number_of_submissions:提交代碼次數
- Last_submission_time:最后一次提交題目日期
運營同學發(fā)現最后一次提交題目日期這一列有各種各樣的日期格式,這對于他分析用戶十分不友好,你能夠幫他輸出用戶ID、等級以及統(tǒng)一后的日期嗎?(日期格式統(tǒng)一為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:畢業(yè)年份
- 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數據清洗的資料請關注腳本之家其它相關文章!
相關文章
Python pandas讀取CSV文件的注意事項(適合新手)
這篇文章主要給大家介紹了關于Python pandas讀取CSV文件的注意事項,非常適合新手,csv是我接觸的比較早的一種文件,比較好的是這種文件既能夠以電子表格的形式查看又能夠以文本的形式查看,需要的朋友可以參考下2021-06-06