日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

Python 数据分析三剑客之 Pandas(十):数据读写

發布時間:2023/12/10 python 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Python 数据分析三剑客之 Pandas(十):数据读写 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

CSDN 課程推薦:《邁向數據科學家:帶你玩轉Python數據分析》,講師齊偉,蘇州研途教育科技有限公司CTO,蘇州大學應用統計專業碩士生指導委員會委員;已出版《跟老齊學Python:輕松入門》《跟老齊學Python:Django實戰》、《跟老齊學Python:數據分析》和《Python大學實用教程》暢銷圖書。


Pandas 系列文章:

  • Python 數據分析三劍客之 Pandas(一):認識 Pandas 及其 Series、DataFrame 對象
  • Python 數據分析三劍客之 Pandas(二):Index 索引對象以及各種索引操作
  • Python 數據分析三劍客之 Pandas(三):算術運算與缺失值的處理
  • Python 數據分析三劍客之 Pandas(四):函數應用、映射、排序和層級索引
  • Python 數據分析三劍客之 Pandas(五):統計計算與統計描述
  • Python 數據分析三劍客之 Pandas(六):GroupBy 數據分裂、應用與合并
  • Python 數據分析三劍客之 Pandas(七):合并數據集
  • Python 數據分析三劍客之 Pandas(八):數據重塑、重復數據處理與數據替換
  • Python 數據分析三劍客之 Pandas(九):時間序列
  • Python 數據分析三劍客之 Pandas(十):數據讀寫

另有 NumPy、Matplotlib 系列文章已更新完畢,歡迎關注:

  • NumPy 系列文章:https://itrhx.blog.csdn.net/category_9780393.html
  • Matplotlib 系列文章:https://itrhx.blog.csdn.net/category_9780418.html

推薦學習資料與網站(博主參與部分文檔翻譯):

  • NumPy 官方中文網:https://www.numpy.org.cn/
  • Pandas 官方中文網:https://www.pypandas.cn/
  • Matplotlib 官方中文網:https://www.matplotlib.org.cn/
  • NumPy、Matplotlib、Pandas 速查表:https://github.com/TRHX/Python-quick-reference-table

文章目錄

    • 【01x00】讀取數據
      • 【01x01】簡單示例
      • 【01x02】header / names 定制列標簽
      • 【01x03】index_col 指定列為行索引
      • 【01x04】sep 指定分隔符
      • 【01x05】skiprows 忽略行
      • 【01x06】na_values 設置缺失值
      • 【01x07】nrows / chunksize 行與塊
    • 【02x00】寫入數據
      • 【02x01】簡單示例
      • 【02x02】sep 指定分隔符
      • 【02x03】na_rep 替換缺失值
      • 【02x04】index / header 行與列標簽
      • 【02x05】columns 指定列


這里是一段防爬蟲文本,請讀者忽略。 本文原創首發于 CSDN,作者 TRHX。 博客首頁:https://itrhx.blog.csdn.net/ 本文鏈接:https://itrhx.blog.csdn.net/article/details/106963135 未經授權,禁止轉載!惡意轉載,后果自負!尊重原創,遠離剽竊!

【01x00】讀取數據

Pandas 提供了一些用于將表格型數據讀取為 DataFrame 對象的函數。常見方法如下:

Pandas 官方對 IO 工具的介紹:https://pandas.pydata.org/pandas-docs/stable/user_guide/io.html

函數描述
read_csv從文件、URL、文件型對象中加載帶分隔符的數據。默認分隔符為逗號
read_table從文件、URL、文件型對象中加載帶分隔符的數據。默認分隔符為制表符('\t')
read_fwf讀取定寬列格式數據(沒有分隔符)
read_clipboard讀取剪貼板中的數據,可以看做 read_table 的剪貼板版本。在將網頁轉換為表格時很有用
read_excel從 Excel XLS 或 XLSX file 讀取表格數據
read_hdf讀取 pandas寫的 HDF5 文件
read_html讀取 HTML 文檔中的所有表格
read_json讀取 JSON( JavaScript Object Notation)字符串中的數據
read_msgpack讀取二進制格式編碼的 pandas 數據(Pandas v1.0.0 中已刪除對 msgpack 的支持,建議使用 pyarrow)
read_pickle讀取 Python pickle 格式中存儲的任意對象
read_sas讀取存儲于 SAS 系統自定義存儲格式的 SAS 數據集
read_sql(使用 SQLAlchemy)讀取 SQL 查詢結果為 pandas 的 DataFrame
read_stata讀取 Stata 文件格式的數據集
read_feather讀取 Feather 二進制格式文件

以下以 read_csv 和 read_table 為例,它們的參數多達 50 多個,具體可參見官方文檔:

read_csv:https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html

read_table:https://pandas.pydata.org/docs/reference/api/pandas.read_table.html

常用參數:

參數描述
path表示文件系統位置、URL、文件型對象的字符串
sep / delimiter用于對行中各字段進行拆分的字符序列或正則表達式
header用作列名的行號,默認為 0(第一行),如果沒有 header 行就應該設置為 None
index_col用作行索引的列編號或列名。可以是單個名稱、數字或由多個名稱、數字組成的列表(層次化索引)
names用于結果的列名列表,結合 header=None
skiprows需要忽略的行數(從文件開始處算起),或需要跳過的行號列表(從0開始)
na_values指定一組值,將該組值設置為 NaN(缺失值)
comment用于將注釋信息從行尾拆分出去的字符(一個或多個)
parse_dates嘗試將數據解析為日期,默認為 False。如果為 True,則嘗試解析所有列。此外,還可以指定需要解析的一組列號或列名。
如果列表的元素為列表或元組,就會將多個列組合到一起再進行日期解析工作(例如,日期、時間分別位于兩個列中)
keep_date_col如果連接多列解析日期,則保持參與連接的列。默認為 False
converters由列號 / 列名跟函數之間的映射關系組成的字典。例如,{'foo': f} 會對 foo 列的所有值應用函數 f
dayfirst當解析有歧義的日期時,將其看做國際格式(例如,7/6/2012 —> June 7,2012),默認為 Fase
date_parser用于解析日期的函數
nrows需要讀取的行數(從文件開始處算起)
iterator返回一個 TextParser 以便逐塊讀取文件
chunksize文件塊的大小(用于迭代)
skip_footer需要忽略的行數(從文件末尾處算起)
verbose打印各種解析器輸出信息,比如“非數值列中缺失值的數量”等
encoding用于 unicode 的文本編碼格式。例如,“utf-8” 表示用 UTF-8 編碼的文本
squeeze如果數據經解析后僅含一列,則返回 Series
thousands千分位分隔符,如 , 或 .

【01x01】簡單示例

首先創建一個 test1.csv 文件:

使用 read_csv 方法將其讀出為一個 DataFrame 對象:

>>> import pandas as pd >>> obj = pd.read_csv(r'C:\Users\TanRe\Desktop\test1.csv') >>> obja b c d message 0 1 2 3 4 hello 1 5 6 7 8 world 2 9 10 11 12 python >>> >>> type(obj) <class 'pandas.core.frame.DataFrame'>

前面的 csv 文件是以逗號分隔的,可以使用 read_table 方法并指定分隔符來讀取:

>>> import pandas as pd >>> obj = pd.read_table(r'C:\Users\TanRe\Desktop\test1.csv', sep=',') >>> obja b c d message 0 1 2 3 4 hello 1 5 6 7 8 world 2 9 10 11 12 python

【01x02】header / names 定制列標簽

以上示例中第一行為列標簽,如果沒有單獨定義列標簽,使用 read_csv 方法也會默認將第一行當作列標簽:

>>> import pandas as pd >>> obj = pd.read_csv(r'C:\Users\TanRe\Desktop\test2.csv') >>> obj1 2 3 4 hello 0 5 6 7 8 world 1 9 10 11 12 python

避免以上情況,可以設置 header=None,Pandas 會為其自動分配列標簽:

>>> import pandas as pd >>> pd.read_csv(r'C:\Users\TanRe\Desktop\test2.csv', header=None)0 1 2 3 4 0 1 2 3 4 hello 1 5 6 7 8 world 2 9 10 11 12 python

也可以使用 names 參數自定義列標簽,傳遞的是一個列表:

>>> import pandas as pd >>> pd.read_csv(r'C:\Users\TanRe\Desktop\test2.csv', names=['a', 'b', 'c', 'd', 'message'])a b c d message 0 1 2 3 4 hello 1 5 6 7 8 world 2 9 10 11 12 python

【01x03】index_col 指定列為行索引

index_col 參數可以指定某一列作為 DataFrame 的行索引,傳遞的參數是列名稱,在以下示例中,會將列名為 message 的列作為 DataFrame 的行索引:

>>> pd.read_csv(r'C:\Users\TanRe\Desktop\test2.csv', names=['a', 'b', 'c', 'd', 'message'], index_col='message')a b c d message hello 1 2 3 4 world 5 6 7 8 python 9 10 11 12

如果需要構造多層索引的 DataFrame 對象,則只需傳入由列編號或列名組成的列表即可:

>>> import pandas as pd >>> pd.read_csv(r'C:\Users\TanRe\Desktop\test3.csv', index_col=['key1', 'key2'])value1 value2 key1 key2 one a 1 2b 3 4c 5 6d 7 8 two a 9 10b 11 12c 13 14d 15 16

【01x04】sep 指定分隔符

在 read_table 中,sep 參數用于接收分隔符,如果遇到不是用固定的分隔符去分隔字段的,也可以傳遞一個正則表達式作為 read_table 的分隔符,如下面的 txt 文件數據之間是由不同的空白字符間隔開的:

>>> import pandas as pd >>> pd.read_table(r'C:\Users\TanRe\Desktop\test1.txt', sep='\s+')A B C aaa -0.264438 -1.026059 -0.619500 bbb 0.927272 0.302904 -0.032399 ccc -0.264273 -0.386314 -0.217601 ddd -0.871858 -0.348382 1.100491

【01x05】skiprows 忽略行

skiprows 參數可用于設置需要忽略的行數,或需要跳過的行號列表,在下面的示例中,讀取文件時選擇跳過第1、3、4行(索引值分別為0、2、3):

>>> import pandas as pd >>> pd.read_csv(r'C:\Users\TanRe\Desktop\test4.csv', skiprows=[0, 2, 3])a b c d message 0 1 2 3 4 hello 1 5 6 7 8 world 2 9 10 11 12 python

【01x06】na_values 設置缺失值

當文件中出現了空字符串或者 NA 值,Pandas 會將其標記成 NaN(缺失值),同樣也可以使用 isnull 方法來判斷結果值是否為缺失值:

>>> import pandas as pd >>> obj = pd.read_csv(r'C:\Users\TanRe\Desktop\test5.csv') >>> objsomething a b c d message 0 one 1 2 3.0 4 NaN 1 two 5 6 NaN 8 world 2 three 9 10 11.0 12 python >>> >>> pd.isnull(obj)something a b c d message 0 False False False False False True 1 False False False True False False 2 False False False False False False

na_values 方法可以傳遞一組值,將這組值設置為缺失值,如果傳遞的為字典對象,則字典的各值將被設置為 NaN:

>>> import pandas as pd >>> obj1 = pd.read_csv(r'C:\Users\TanRe\Desktop\test5.csv') >>> obj1something a b c d message 0 one 1 2 3.0 4 NaN 1 two 5 6 NaN 8 world 2 three 9 10 11.0 12 python >>> >>> obj2 = pd.read_csv(r'C:\Users\TanRe\Desktop\test5.csv', na_values=['1', '12']) >>> obj2something a b c d message 0 one NaN 2 3.0 4.0 NaN 1 two 5.0 6 NaN 8.0 world 2 three 9.0 10 11.0 NaN python >>> >>> sentinels = {'message': ['python', 'world'], 'something': ['two']} >>> obj3 = pd.read_csv(r'C:\Users\TanRe\Desktop\test5.csv', na_values=sentinels) >>> obj3something a b c d message 0 one 1 2 3.0 4 NaN 1 NaN 5 6 NaN 8 NaN 2 three 9 10 11.0 12 NaN

【01x07】nrows / chunksize 行與塊

以下 test6.csv 文件中包含 50 行數據:

可以設置 pd.options.display.max_rows 來緊湊地顯示指定行數的數據:

>>> import pandas as pd >>> pd.options.display.max_rows = 10 >>> pd.read_csv(r'C:\Users\TanRe\Desktop\test6.csv')one two three four key 0 0.467976 -0.038649 -0.295344 -1.824726 L 1 -0.358893 1.404453 0.704965 -0.200638 B 2 -0.501840 0.659254 -0.421691 -0.057688 G 3 0.204886 1.074134 1.388361 -0.982404 R 4 0.354628 -0.133116 0.283763 -0.837063 Q .. ... ... ... ... .. 45 2.311896 -0.417070 -1.409599 -0.515821 L 46 -0.479893 -0.633419 0.745152 -0.646038 E 47 0.523331 0.787112 0.486066 1.093156 K 48 -0.362559 0.598894 -1.843201 0.887292 G 49 -0.096376 -1.012999 -0.657431 -0.573315 0[50 rows x 5 columns]

通過 nrows 參數可以讀取指定行數:

>>> import pandas as pd >>> pd.read_csv(r'C:\Users\TanRe\Desktop\test6.csv', nrows=5)one two three four key 0 0.467976 -0.038649 -0.295344 -1.824726 L 1 -0.358893 1.404453 0.704965 -0.200638 B 2 -0.501840 0.659254 -0.421691 -0.057688 G 3 0.204886 1.074134 1.388361 -0.982404 R 4 0.354628 -0.133116 0.283763 -0.837063 Q

要逐塊讀取文件,可以指定 chunksize(行數):

>>> import pandas as pd >>> chunker = pd.read_csv(r'C:\Users\TanRe\Desktop\test6.csv', chunksize=50) >>> chunker <pandas.io.parsers.TextFileReader object at 0x07A20D60>

返回的 TextParser 對象,可以根據 chunksize 對文件進行逐塊迭代。以下示例中,對 test6.csv 文件數據進行迭代處理,將值計數聚合到 “key” 列中:

>>> import pandas as pd >>> chunker = pd.read_csv(r'C:\Users\TanRe\Desktop\test6.csv', chunksize=50) >>> tot = pd.Series([], dtype='float64') >>> for piece in chunker:tot = tot.add(piece['key'].value_counts(), fill_value=0)>>> tot = tot.sort_values(ascending=False) >>> tot[:10] G 6.0 E 5.0 B 5.0 L 5.0 0 5.0 K 4.0 A 4.0 R 4.0 C 2.0 Q 2.0 dtype: float64
這里是一段防爬蟲文本,請讀者忽略。 本文原創首發于 CSDN,作者 TRHX。 博客首頁:https://itrhx.blog.csdn.net/ 本文鏈接:https://itrhx.blog.csdn.net/article/details/106963135 未經授權,禁止轉載!惡意轉載,后果自負!尊重原創,遠離剽竊!

【02x00】寫入數據

Pandas 提供了一些用于將表格型數據讀取為 DataFrame 對象的函數。常見方法如下:

函數描述
to_csv將對象寫入逗號分隔值(csv)文件
to_clipboard將對象復制到系統剪貼板
to_excel將對象寫入 Excel 工作表
to_hdf使用 HDFStore 將包含的數據寫入 HDF5 文件
to_html將 DataFrame 呈現為 HTML 表格
to_json將對象轉換為 JSON( JavaScript Object Notation)字符串
to_msgpack將對象寫入二進制格式編碼的文件(Pandas v1.0.0 中已刪除對 msgpack 的支持,建議使用 pyarrow)
to_picklePickle(序列化)對象到文件
to_sql將存儲在 DataFrame 中的數據寫入 SQL 數據庫
to_stata將 DataFrame 對象導出為 Stata 格式
to_feather將 DataFrames 寫入 Feather 二進制格式文件

以下以 to_csv 為例,它的參數同樣多達 50 多個,具體可參見官方文檔:

  • https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.to_csv.html

  • https://pandas.pydata.org/docs/reference/api/pandas.Series.to_csv.html

【02x01】簡單示例

以之前的 test5.csv 文件為例,先讀出數據,再將數據寫入另外的文件:

>>> import pandas as pd >>> data = pd.read_csv(r'C:\Users\TanRe\Desktop\test5.csv') >>> datasomething a b c d message 0 one 1 2 3.0 4 NaN 1 two 5 6 NaN 8 world 2 three 9 10 11.0 12 python >>> >>> data.to_csv(r'C:\Users\TanRe\Desktop\out1.csv')

【02x02】sep 指定分隔符

sep 參數可用于其他分隔符:

>>> import pandas as pd >>> data = pd.read_csv(r'C:\Users\TanRe\Desktop\test5.csv') >>> datasomething a b c d message 0 one 1 2 3.0 4 NaN 1 two 5 6 NaN 8 world 2 three 9 10 11.0 12 python >>> >>> data.to_csv(r'C:\Users\TanRe\Desktop\out2.csv', sep='|')

【02x03】na_rep 替換缺失值

na_rep 參數可將缺失值(NaN)替換成其他字符串:

>>> import pandas as pd >>> data = pd.read_csv(r'C:\Users\TanRe\Desktop\test5.csv') >>> datasomething a b c d message 0 one 1 2 3.0 4 NaN 1 two 5 6 NaN 8 world 2 three 9 10 11.0 12 python >>> >>> data.to_csv(r'C:\Users\TanRe\Desktop\out3.csv', na_rep='X')

【02x04】index / header 行與列標簽

設置 index=False, header=False,可以禁用行標簽與列標簽:

>>> import pandas as pd >>> data = pd.read_csv(r'C:\Users\TanRe\Desktop\test5.csv') >>> datasomething a b c d message 0 one 1 2 3.0 4 NaN 1 two 5 6 NaN 8 world 2 three 9 10 11.0 12 python >>> >>> data.to_csv(r'C:\Users\TanRe\Desktop\out4.csv', index=False, header=False)

還可以傳入列表來重新設置列標簽:

>>> import pandas as pd >>> data = pd.read_csv(r'C:\Users\TanRe\Desktop\test5.csv') >>> datasomething a b c d message 0 one 1 2 3.0 4 NaN 1 two 5 6 NaN 8 world 2 three 9 10 11.0 12 python >>> >>> data.to_csv(r'C:\Users\TanRe\Desktop\out5.csv', header=['a', 'b', 'c', 'd', 'e', 'f'])

【02x05】columns 指定列

可以通過設置 columns 參數,只寫入部分列,并按照指定順序排序:

>>> import pandas as pd >>> data = pd.read_csv(r'C:\Users\TanRe\Desktop\test5.csv') >>> datasomething a b c d message 0 one 1 2 3.0 4 NaN 1 two 5 6 NaN 8 world 2 three 9 10 11.0 12 python >>> >>> data.to_csv(r'C:\Users\TanRe\Desktop\out6.csv', columns=['c', 'b', 'a'])


這里是一段防爬蟲文本,請讀者忽略。 本文原創首發于 CSDN,作者 TRHX。 博客首頁:https://itrhx.blog.csdn.net/ 本文鏈接:https://itrhx.blog.csdn.net/article/details/106963135 未經授權,禁止轉載!惡意轉載,后果自負!尊重原創,遠離剽竊!

總結

以上是生活随笔為你收集整理的Python 数据分析三剑客之 Pandas(十):数据读写的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。