乾貨 | pandas讀取csv文件數據的方法及注意點

2021-02-13 中興開發者社區

點擊上方「中興開發者社區」,關注我們

每天讀一篇一線開發者原創好文

作者介紹:

作者劉曉波是開源軟體愛好者,致力於DPI領域和機器學習的落地應用。這篇文章介紹了利用數據分析工具pandas讀取csv文件的方法和注意點,便於迅速過渡到數據處理階段。

pandas是一個高效的數據分析工具。基於其高度抽象的數據結構DataFrame,幾乎可以對數據進行任何你想要的操作。

由於現實世界中數據源的格式非常多,pandas也支持了不同數據格式的導入方法,本文介紹pandas如何從csv文件中導入數據。

從上圖可以看出,我們要做的工作就是把存儲在csv格式中的數據讀入並轉換成DataFrame格式。
pandas提供了一個非常簡單的api函數來實現這個功能:read_csv()。

1. 通過read_csv接口讀入csv文件中的數據

下面是一個簡單的示例:

import pandas as pd

CSV_FILE_PATH = './test.csv'

df = pd.read_csv(CSV_FILE_PATH)

print(df.head(5))

只要簡單地指定csv文件的路徑,便可以得到DataFrame格式的數據df。對於理想情況下的數據,導入過程就是這麼簡單!

下面考慮這種情況:假設csv文件頭部有幾個無效行,那麼列印出來的結果可能如下所示:

                     1          2      3       4

0             datetime       host    hit  volume

1  2018-07-24 09:00:00  weibo.com     20    1020

2  2018-07-25 09:00:00     qq.com  no 20    1028

3  2018-07-26 19:00:00   sina.com     25    1181

4  2018-07-27 21:00:00   sohu.com     15    4582

pandas把【1,2,3,4】這組無效數據當作了column name;而實際上,我們更偏向於將【datetime,host,hit,volume】這組數據當作column name。對於這種情況,read_csv()函數提供了一個參數:skiprows,用於指定跳過csv文件的頭部的前幾行。在這裡,我們跳過1行即可。

import pandas as pd

CSV_FILE_PATH = './test.csv'

df = pd.read_csv(CSV_FILE_PATH, skiprows=1)

print(df.head(5))

得到的結果如下所示:

             datetime       host    hit  volume

0  2018-07-24 09:00:00  weibo.com     20    1020

1  2018-07-25 09:00:00     qq.com  no 20    1028

2  2018-07-26 19:00:00   sina.com     25    1181

3  2018-07-27 21:00:00   sohu.com     15    4582

2. 處理csv文件中的無效數據

pandas可以自動推斷每個column的數據類型,以方便後續對數據的處理。還以上文中的數據為例,通過如下代碼:

import pandas as pd

CSV_FILE_PATH = './test.csv'

df = pd.read_csv(CSV_FILE_PATH)

print(df.head(5))

print('datatype of column hit is: ' + str(df['hit'].dtypes))

得出的結果:

             datetime       host  hit  volume

0  2018-07-24 09:00:00  weibo.com   20    1020

1  2018-07-25 09:00:00     qq.com   20    1028

2  2018-07-26 19:00:00   sina.com   25    1181

3  2018-07-27 21:00:00   sohu.com   15    4582

datatype of column hit is: int64

pandas將hit這一列的數據類型判定為了int64,這顯然方便未來我們對於該列數據的運算。
但是在實際情況中,我們經常會面臨數據缺失的問題,如果出現這種情況,我們往往會用一些佔位符來表達。假設,我們用missing這個佔位符來表示數據缺失,仍使用上述代碼,來探索下會發生些什麼:

             datetime       host      hit   volume

0  2018-07-24 09:00:00  weibo.com       20     1020

1  2018-07-25 09:00:00     qq.com       20     1028

2  2018-07-26 19:00:00   sina.com  missing  missing

3  2018-07-27 21:00:00   sohu.com       15     4582

datatype of column hit is: object

由於hit這一列中出現了missing這個字符串,pandas將hit這一列的數據類型判斷成了object。這會給我們對該列數據的運算帶來影響。例如,假設我們要計算hit列前兩行數據的和,代碼如下:

print(df['hit'][0] + df['hit'][1])

結果是:

2020

本來我們想要的是數學運算結果,但得到的卻是一個字符串拼接結果。這就是由於數據類型判斷失誤帶來的嚴重影響。
對於這種情況,read_csv()函數也提供了一個簡單的處理方式,只需要通過na_value參數指定佔位符,pandas便會在讀入數據的過程中自動將這些佔位符轉換成NaN,從而不影響pandas對column數據類型的正確判斷。
示例代碼:

import pandas as pd

CSV_FILE_PATH = './test.csv'

df = pd.read_csv(CSV_FILE_PATH, skiprows=0, na_values=['missing')

print(df.head(5))

print('datatype of column hit is: ' + str(df['hit'].dtypes))

print(df['hit'][0] + df['hit'][1])

運行結果如下:

             datetime       host   hit  volume

0  2018-07-24 09:00:00  weibo.com  20.0  1020.0

1  2018-07-25 09:00:00     qq.com  20.0  1028.0

2  2018-07-26 19:00:00   sina.com   NaN     NaN

3  2018-07-27 21:00:00   sohu.com  15.0  4582.0

datatype of column hit is: float64

40.0

可以看到,pandas將數據集中的missing單元全部轉換為了NaN,並成功判斷出hit這一列的數據類型。


3. 總結

通過一個簡單的read_csv()函數,實際可以做到如下幾件事:

當然,read_csv()函數還有一系列其他參數來應對各種情況,遇到具體問題的同學可參考其接口指南。

相關焦點

  • 一篇文章就能深入理解pandas讀取excel,txt,csv文件等命令
    ://pandas.pydata.org/pandas-docs/version/0.24/reference/io.html文檔操作屬於pandas裡面的 Input/Output也就是IO操作,基本的API都在上述網址,接下來本文核心帶你理解部分常用的命令pandas讀取txt文件讀取txt文件需要確定txt文件是否符合基本的格式,也就是是否存在 \t, , ,等特殊的分隔符一般
  • 《pandas數據讀取》
    ,需要使用不同的函數讀取,pandas內置了10餘種數據源讀取函數和對應的數據寫入函數,常見的數據源有3種,分別是資料庫數據,文本文件(包含一般文本文件和CSV文件)和Excel文件,掌握這三種數據源讀取方法,便能夠完成80%左右的數據讀取工作。
  • 詳解Pandas讀取csv文件時2個有趣的參數設置
    Pandas可能是廣大Python數據分析師最為常用的庫了,其提供了從數據讀取、數據預處理到數據分析以及數據可視化的全流程操作。
  • python-pandas讀寫csv數據
    /pandas-docs/stable/user_guide/io.html一、使用pandas讀取和寫入csv文件pd.read_csv("filepath",[encoding='編碼'])pd.read_csv("filepath",usecols=[0,1,2,...]
  • 乾貨 | 用 pandas 讀取 csv 和 Excel 數據
    本文採用真實的股票數據作為案例,教你如何在Python中讀取常用的數據文件。內容:數據文件下載地址:csv 數據文件 nasdaq-listings.csvhttps://raw.githubusercontent.com/fishstar/Data-Analysis-Practice/master/import%26manage_data_in_Python/nasdaq-listings.csvExcel
  • python(pandas)讀取外部數據---使用Pandas讀寫操作txt文件
    1、準備.txt的數據文件其實pandas讀寫.txt文件和讀寫csv文件是類似的,而且使用的都是pd.read_csv()  /
  • [乾貨分享】用Python讀取CSV文件的幾種方式
    有時候數據是以csv形式存儲的,要處理數據我們需要先進行讀取操作。這裡我總結了幾種csv的讀取方法(基於python)。1.利用numpy讀取import numpy as npdata = np.loadtxt(open("路徑.csv","rb"),delimiter=",",skiprows=n,usecols=[2,3]) delimiter是分隔符,skiprows是跳過前n行,usecols是使用的列數,例子中讀取的是
  • Python數據分析:pandas讀取和寫入數據
    平時工作中,我們會接觸到不同的數據文件,比如很常見的excel文件(後綴名為xls和xlsx),csv、txt等文本文件,json文件以及sql文件等等。pandas讀取這些數據文件的方法如表格所示:01讀取寫入文本文件read_csv()方法用來讀取 csv格式的數據文件,read_table()方法則是讀取通用分隔符分隔的數據文件,它們的參數相同。
  • 用Python讀取大型CSV文件
    如果你遇到一個大的CSV文件,你想處理它,你有幾個選擇。如果你可以一次處理其中的一部分,你可以把它讀成塊,然後處理每個塊。如果您知道您應該有足夠的內存來加載文件,縮小文件大小再讀取。這裡需要注意,一般來說,你應該有三到十倍於你要操作的DataFrame大小的內存。額外的內存應該給你足夠的額外空間來執行許多常見的操作。
  • pandas讀取數據(1)
    將表格型數據讀取為DataFrame是pandas的重要特性,下表總結了實現該功能的部分函數。函數描述read_csv讀取csv文件,逗號為默認的分隔符read_table讀取table文件,也就是txt文件,制表符('\t')為默認分隔符read_clipboardread_table的剪貼板版本,在將表格從Web頁面轉換成數據時有用read_excel讀取XLS或XLSX文件read_hdf讀取pandas存儲的HDF5
  • 127、使用pandas讀取文本文件
    pandas提供了一些用於將表格型數據讀取為DataFrame對象的函數,其中常用read_csv和read_table讀取文件。0.png下面出現的例子中需要讀取的文件都存放在我自己的電腦 D:Pytho\notebookpydata-book-masterch06 中。
  • pandas庫讀取csv文件
    csv文件讀取比較人性化的庫就是pandas,我之前一直在mac上用,確實讓人愛不釋手。但昨天直播前將代碼放到window時候,代碼就這樣神奇的報錯了。直播完後立馬有朋友告訴我解決辦法,特此連夜分享,方便大家將爬到的微博csv文件數據進行分析。本文只是為了解決csv在windows讀取問題而寫,內容不多。對pandas感興趣的可以看文檔或者去百度下常用方法。文章末尾附上數據及腳本,大家可以照著本文敲打運行下。
  • Python學習120課 pandas簡介kaggle下載數據及pandas讀取外部數據
    現在我們開始學習pandas,pandas一般用的更多,pandas是基於numpy去寫的。pandas是一個專門做數據結構和數據分析的庫。●pandas的安裝推薦使用anaconda,只要安裝了anaconda,它裡面就會自帶pandas,這會為我們省去很多的麻煩。接下來就是用pandas去處理數據,數據從哪來呢?
  • python項目實踐分享:使用pandas處理大型CSV文件
    我們先來看一下其中幾個常見的API:1.reader(csvfile[,dialect='excel'][, fmtparam])主要用於CSV文件的讀取,返回一個 reader對象用於在CSV文件內容上進行行迭代。
  • 創建和持久化數據幀DataFrames 第二篇 讀取大型CSV文件
    你需要能夠把你的數據裝進內存,才能使用pandas。如果你遇到一個大的CSV文件,你想處理它,你有幾個選擇。如果你可以一次處理其中的一部分,你可以把它讀成塊,然後處理每個塊。如果您知道您應該有足夠的內存來加載文件,縮小文件大小再讀取。這裡需要注意,一般來說,你應該有三到十倍於你要操作的DataFrame大小的內存。
  • python讀取csv簡明教程
    什麼是CSV文件?CSV文件是一種純文本文件,其使用特定的結構來排列表格數據。 CSV是緊湊,簡單且通用的數據交換通用格式。 許多在線服務允許其用戶將網站中的表格數據導出到CSV文件中。 CSV文件可在Excel中打開,幾乎所有資料庫都具有允許從CSV文件導入的工具。 CSV文件行以換行符分割,列用逗號、分號、冒號等分隔。
  • 數據科學 | pandas數據導入與導出
    當我們開始著手做一個數據分析項目時,選擇和導入數據集是第一個步驟,而導出數據雖然非必需,但有時候我們也需要保存處理或者分析後的結果,方便下次使用。在pandas中,它已經為我們提供了很多不同格式數據的導入和導出方法,下面這篇文章將具體介紹一些較為常用的方法,包括excel、csv文件以及資料庫的導入導出等。數據導入和導出是pandas中很基礎且重要的一個部分。
  • 利用Python讀取外部數據文件
    作者:劉順祥個人微信公眾號:每天進步一點點2015不論是數據分析,數據可視化,還是數據挖掘,一切的一切全都是以數據作為最基礎的元素
  • Pandas數據清洗系列:read_csv函數詳解(一)
    pandas中提供了read_csv函數來讀取csv文件,今天我們來學習這個函數。這個參數其實為我們提供了一種快捷讀取以空白字符為分隔符數據的方法。等價於使用sep=\s+,因此,當我們讀取的文件是以空白字符為分隔符時,就可以使用這個參數,同時無需指定sep或者delimiter參數。header如果數據中包含表頭,或者說列名,這個參數用來指定表頭在數據中的行號。接收一個int對象或者由int構成的列表對象。
  • Pandas數據清洗系列:read_csv函數詳解(三)
    na_filter我們可以控制pandas在讀取數據時是否自動檢測數據中的缺失值。這個參數就是用來控制這個行為的。默認為True表示檢測缺失值,如果設置為False,表示不檢測缺失值,這樣可以提高數據讀取的速度。需要注意的是,當這個參數設置為False時,na_values和keep_default_na兩個參數將被忽略,這很容易理解。