Python CSV 數據分析:問題排查與解決全記錄
前段時間,我接到一個任務,需要對公司的銷售數據進行分析。這些數據存儲在 CSV 文件里,本想著用 Python 處理起來會很輕松,結果卻狀況百出。下面,就跟大家講講我是如何一步步解決這些問題的。
數據讀取時的編碼問題
我打算用pandas庫來處理 CSV 文件,代碼如下:
import pandas as pdtry:data = pd.read_csv('sales_data.csv')
except FileNotFoundError:print("文件不存在")
except UnicodeDecodeError:print("編碼錯誤")
運行代碼后,程序報錯UnicodeDecodeError。我意識到,可能是 CSV 文件的編碼格式有問題。CSV 文件常用的編碼格式有utf - 8、gbk等。我通過查閱資料得知,pandas默認以utf - 8編碼讀取文件。于是,我猜測文件可能是gbk編碼,修改代碼如下:
import pandas as pdtry:data = pd.read_csv('sales_data.csv')
except FileNotFoundError:print("文件不存在")
except UnicodeDecodeError:print("編碼錯誤")
這次,成功讀取了數據。
數據清洗時的異常值問題
讀取數據后,我查看數據概況,發現 “銷售額” 這一列存在一些異常值,比如負數。我需要將這些異常值篩選出來并處理掉,代碼如下:
import pandas as pddata = pd.read_csv('sales_data.csv', encoding='gbk')
invalid_data = data[data['銷售額'] < 0]
print(invalid_data)
運行代碼,能看到具體的異常數據。為了修正這些數據,我跟業務部門溝通后得知,這些負數是錄入錯誤導致的,應該為 0。于是,我修改代碼進行數據修正:
import pandas as pddata = pd.read_csv('sales_data.csv', encoding='gbk')
data['銷售額'] = data['銷售額'].apply(lambda x: 0 if x < 0 else x)
數據分組統計時的類型問題
接下來,我想按 “銷售地區” 對銷售額進行分組統計,代碼如下:
import pandas as pddata = pd.read_csv('sales_data.csv', encoding='gbk')
data['銷售額'] = data['銷售額'].apply(lambda x: 0 if x < 0 else x)
grouped = data.groupby('銷售地區')['銷售額'].sum()
print(grouped)
結果運行后,發現統計結果不對。經過排查,我發現 “銷售地區” 這一列的數據類型是浮點數,而不是字符串,這導致分組統計出現錯誤。我通過以下代碼修正數據類型:
import pandas as pddata = pd.read_csv('sales_data.csv', encoding='gbk')
data['銷售額'] = data['銷售額'].apply(lambda x: 0 if x < 0 else x)
data['銷售地區'] = data['銷售地區'].astype(str)
grouped = data.groupby('銷售地區')['銷售額'].sum()
print(grouped)
這次,成功得到了正確的統計結果。
通過這次項目,我深切體會到,在數據分析過程中,遇到問題不可怕,只要掌握正確的排查方法,不斷嘗試,就能順利解決問題,完成任務。