天天看點

#yyds幹貨盤點#資料分析從零開始實戰,Pandas讀寫TSV/Json資料

這是我參與11月更文挑戰的第15天。

一、寫在前面

本系列學習筆記參考書籍:  《資料分析實戰》托馬茲·卓巴斯,會将自己學習本書的筆記分享給大家,同樣開成一個系列『資料分析從零開始實戰』。

上一篇文章中帶大家了解了資料分析基礎,配置好了資料分析的基本環境,以及利用

pandas

子產品讀寫csv檔案,在本文開頭,我也補充了csv與tsv的基本介紹與差別,意在更好的讓大家了解相關知識點,本文将帶大家繼續學習檔案讀取。

點選檢視第一篇文章:# 資料分析從零開始實戰,Pandas讀寫CSV資料

二、上節補充

CSV

逗号分隔值(Comma-Separated Values,CSV,有時也稱為字元分隔值,因為分隔字元也可以不是逗号),其檔案以純文字形式存儲表格資料(數字和文本)。

TSV

TSV 是Tab-separated values的縮寫,即制表符分隔值。

Python的csv子產品準确的講應該叫做dsv子產品,因為它實際上是支援範式的分隔符分隔值檔案(DSV,delimiter-separated values)的。

delimiter參數值預設為半形逗號,即預設将被處理檔案視為CSV。
當`delimiter='\t'`時,被處理檔案就是TSV。
           

三、基本知識概要

1.利用pandas讀寫tsv檔案

2.利用pandas讀寫json檔案

四、開始動手動腦

1.利用pandas讀寫tsv檔案

在文章開頭我已經說明了csv與tsv的差别,相信部分看過第一篇文章的讀者應該知道怎麼處理tsv檔案了。

csv與tsv隻是内容的分隔符不一樣,前者是

,

,後者是

\t

,python讀取這兩類檔案都使用

csv

子產品,也可以直接利用

pandas

,這裡我們講利用pandas讀取方式,使用的函數

read_csv()

to_csv()

在上一篇 文章中有詳細介紹,這裡我直接上案例代碼。

(1) 讀取tsv檔案代碼

import pandas as pd
import os

# 擷取目前檔案父目錄路徑
father_path = os.getcwd()

# 原始資料檔案路徑
rpath_tsv = father_path+r'\data01\city_station.tsv'
# 讀取資料
tsv_read = pd.read_csv(rpath_tsv, sep="\t")
# 顯示資料前10條
print(tsv_read.head(10))
           

運作結果

站點名 代号
0  北京北 VAP
1  北京東 BOP
2  北京  BJP
3  北京南 VNP
4  北京西 BXP
           

(2) 寫tsv檔案代碼

import pandas as pd
import os

# 擷取目前檔案父目錄路徑
father_path = os.getcwd()

# 儲存資料檔案路徑
path_tsv = father_path+r'\data01\temp_city.tsv'

data = {"站點名": ["北京北", "北京東", "北京", "北京南", "北京西"],
        "代号": ["VAP", "BOP", "BJP", "VNP", "BXP"]}
df = pd.DataFrame(data)
df.to_csv(path_tsv, sep="\t", index=False)
           

運作結果

#yyds幹貨盤點#資料分析從零開始實戰,Pandas讀寫TSV/Json資料

(3)号外加餐

利用csv子產品也可以直接讀取csv和tsv檔案

csv.reader(csvfile, dialect='excel', **fmtparams)
csv.writer(csvfile, dialect='excel', **fmtparams)
           
  • csvfile,必須是支援疊代(Iterator)的對象,可以是檔案(file)對象或者清單(list)對象,如果是檔案對

    象,打開時需要加"b"标志參數。

  • qdialect,編碼風格,預設為excel的風格,也就是用逗号(,)分隔,dialect方式也支援自定義
  • fmtparam,格式化參數,用來覆寫之前dialect對象指定的編碼風格。
2.利用pandas讀寫json檔案

(1)利用pandas讀取json檔案

import pandas as pd
import os

# 擷取目前檔案父目錄路徑
father_path = os.getcwd()
# 原始資料檔案路徑
rpath_json = father_path+r'\data01\realEstate_trans.json'
json_read = pd.read_json(rpath_json)

# 輸出頭10行記錄
print(json_read.head(10))
           

運作結果

#yyds幹貨盤點#資料分析從零開始實戰,Pandas讀寫TSV/Json資料

函數解析

read_json(path_or_buf,orient,encoding,numpy)

常見參數解析:

  • path_or_buf:字元串,表示檔案路徑;
  • orient:訓示預期的JSON字元串格式。可以to_json()使用相應的方向值生成相容的JSON字元串。一組可能的方向是:
'split' : dict like {index -> [index], columns -> [columns], data -> [values]}
'records' : list like [{column -> value}, ... , {column -> value}]
'index' : dict like {index -> {column -> value}}
'columns' : dict like {column -> {index -> value}}
'values' : just the values array
           
  • encoding:字元串,預設為'utf-8';
  • numpy:布爾值,預設為False,直接解碼為numpy數組。僅支援數字資料,但支援非數字列和索引标簽。另請注意,如果numpy = True,則每個術語的JSON順序必須相同。

(2)利用pandas寫入json檔案

import pandas as pd
import os

# 擷取目前檔案父目錄路徑
father_path = os.getcwd()
# 存儲資料檔案路徑
wpath_json = father_path+r'\data01\temp_trans.json'
data = [{"city": "SACRAMENTO", "longitude": -121.434879, "street": "3526 HIGH ST", "sq__ft": 836, "latitude": 38.631913, "sale_date": "Wed May 21 00:00:00 EDT 2008", "zip": 95838, "beds": 2, "type": "Residential", "state": "CA", "baths": 1, "price": 59222}, {"city": "SACRAMENTO", "longitude": -121.431028, "street": "51 OMAHA CT", "sq__ft": 1167, "latitude": 38.478902, "sale_date": "Wed May 21 00:00:00 EDT 2008", "zip": 95823, "beds": 3, "type": "Residential", "state": "CA", "baths": 1, "price": 68212}, {"city": "SACRAMENTO", "longitude": -121.443839, "street": "2796 BRANCH ST", "sq__ft": 796, "latitude": 38.618305, "sale_date": "Wed May 21 00:00:00 EDT 2008", "zip": 95815, "beds": 2, "type": "Residential", "state": "CA", "baths": 1, "price": 68880}]
df = pd.DataFrame(data)
df.to_json(wpath_json)
           

運作結果

#yyds幹貨盤點#資料分析從零開始實戰,Pandas讀寫TSV/Json資料

函數解析

to_json(path_or_buf,orient,encoding,index)

  • 前三個參數和read_json()裡的一樣
  • index:False則選擇不寫入索引,預設為True。

【注】利用json模版的loads()與dumps()方法也可以實作json檔案的讀寫。

五、送你的話

我始終覺得,要想學好一門語言,底層是最主要的,是以不要覺得入門的這些基本東西太簡單,學好基礎,才能成大牛。

堅持 and 努力 : 終有所獲。

思想很複雜,

實作很有趣,

隻要不放棄,