1.使用pandas.read_csv(filePath)方法來讀取csv文件時,可能會出現這種錯誤:
ParserError:Error tokenizing data.C error:Expected 2 fields in line 407,saw 3.
這句話的意思是,在csv文件的第407行數據,期待2個字段,但在第407行實際發現了3個字段。
緣由:header只有兩個字段名,但數據的第407行卻出現了3個字段(多是該行數據包含了逗號,或者確實有三個部分),致使pandas不知道該如何處理。
解決辦法:把第407行多出的字段刪除,或者經過在read_csv方法中設置error_bad_lines=False來忽略這種錯誤:
改成html
pandas.read_csv(filePath,error_bad_lines=False)
來忽略掉其中出現錯亂(例如,因爲逗號致使多出一列)的行。url
2.KeyError錯誤:
報這種錯是因爲使用了DataFrame中沒有的字段,例如id字段,緣由多是:
1.csv文件的header部分沒加逗號分割,此時可以使用df.columns.values來查看df到底有哪些字段:spa
print(df.columns.values)
2.在操做DataFrame的過程當中丟掉了id字段的header,卻沒發現該字段已丟失。
例如:.net
df=df[df['id']!='null']#取得id字段不爲null的行 df=df['id']#賦值後df爲Series,表示df在id列的值,而再也不是一個DataFrame,因而丟掉了id的頭,此時若再使用df['id']將報錯。
3.取列的值,與取列的區別:code
df=df['id']#取id列的值,賦值後df爲Series類型,可用print(type(df))來查看其類型 df=df[['id']]#只取df的id列做爲一個新的DataFrame,賦值後df仍然是一個DataFrame df=df[['id','age']]#取df的id和age列做爲一個新的DataFrame,賦值後df仍然是一個DataFrame
4.過濾行htm
df=df[df['id']!='null']#過濾掉id字段取值爲'null'的行
注意,此處的'null'是一個字符串,若df中某行id字段的值不是字符串型,或者爲空,將報TypeError:invalid type comparison錯,由於只有相同類型的值才能進行比較。blog
解決辦法:若是不能保證id列都是string類型,則須要去掉該過濾條件。token
5.列值的集合: df['col_name'].values字符串
想實現取某一行的值並加入到一個集合中去(還有不少其餘csv也有這個列,所以沒有使用df.drop_duplicates()方法),達到去重的效果,由於對pandas不熟,沒有想到特別好的方法,最後這樣實現的:get
id_set=set() for id in df['id'].values: id_set.add(id)
此法效率應該不高,若讀者有更好的方法,可留言告知,謝謝。
6.指定列的去重
可參考: https://www.cnblogs.com/everfight/p/pandas_to_list.html