-- 不怕前路坎坷,只怕從一開始就走錯了方向html
Pandas 是python的一個數據分析包,歸入了大量庫和一些標準的數據模型,提供了高效地操做大型數據集所需的工具。Pandas 就是爲解決數據分析任務生的,不管是數據分析仍是機器學習項目數據預處理中, Pandas 無處不在。python
最近掉進一坑,差點鑄成大錯。實在沒想到竟然栽在pandas.read_csv上了,這裏分享一下,但願你們注意。機器學習
另:業務數據不方便拿出來演示,爲儘量復現,這裏我手造了一份,另存爲 income.csv 文件。工具
讀取csv文件小菜一碟學習
import numpy as np import pandas as pd df = pd.read_csv(r'C:\...\income.csv',encoding='utf-8')
讀好了看看數據信息吧:翻譯
df.info() RangeIndex: 6 entries, 0 to 5 Data columns (total 1 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 income 6 non-null object dtypes: object(1) memory usage: 176.0+ bytes
誒,怎麼數據成了object?不該該是float嗎?code
無論他,硬轉一發htm
df=pd.DataFrame(df,dtype=np.float)
竟然報錯了,1000被讀成了字符串。
blog
其實這裏我還掉進了另外一個坑,使用了一個已被棄用的 .convert_objects 方法。這種方法更硬,直接把string轉成了NaN,因此後面各類操做流暢且錯誤地進行着....這都是 pandas 沒升級的鍋,按期檢查升級包太有必要了(pip 的高階玩法)token
說回剛纔的問題,1,000被讀成了字符串是由於csv文件中它使用了千位分隔符。問題其實很是簡單,設置一下 thousands 參數就好了
df2 = pd.read_csv(r'C:\...\income.csv',encoding='utf-8',thousands =',')
看一下info
df2.info() <class 'pandas.core.frame.DataFrame'> RangeIndex: 6 entries, 0 to 5 Data columns (total 1 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 income 6 non-null float64 dtypes: float64(1)
往下繼續
df2.describe() income count 6.000000 mean 16934.983333 std 40695.203980 min 0.000000 25% 32.425000 50% 300.000000 75% 875.000000 max 100000.000000
一切正常!
pandas.read_csv()的參數特別多,除了filepath,其餘都可缺省。參數的具體含義這裏就不贅述,還想複習一下的同窗能夠直接去看官方文檔
http://pandas.pydata.org/pandas-docs/stable/io.html
英語很差的同窗能夠看一下熱心博主的翻譯版:
http://www.javashuo.com/article/p-nmbkbeht-gm.html