數據分析從零開始實戰(二)

  • 2020 年 1 月 16 日
  • 筆記

上節補充

上篇數據分析從零開始實戰(一)

CSV

逗號分隔值(Comma-Separated Values,CSV,有時也稱為字符分隔值,因為分隔字符也可以不是逗號),其文件以純文本形式存儲表格數據(數字和文本)。

TSV

TSV 是Tab-separated values的縮寫,即製表符分隔值。 Python的csv模塊準確的講應該叫做dsv模塊,因為它實際上是支持範式的分隔符分隔值文件(DSV,delimiter-separated values)的。 delimiter參數值默認為半角逗號,即默認將被處理文件視為CSV。 當delimiter='t'時,被處理文件就是TSV。

零 寫在前面

上一篇文章中帶大家了解了數據分析基礎,配置好了數據分析的基本環境,以及利用pandas模塊讀寫csv文件,在本文開頭,我也補充了csv與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'data01city_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'data01temp_city.tsv'    data = {"站點名": ["北京北", "北京東", "北京", "北京南", "北京西"],          "代號": ["VAP", "BOP", "BJP", "VNP", "BXP"]}  df = pd.DataFrame(data)  df.to_csv(path_tsv, sep="t", index=False)
運行結果
(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'data01realEstate_trans.json'  json_read = pd.read_json(rpath_json)    # 輸出頭10行記錄  print(json_read.head(10))
運行結果
函數解析

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'data01temp_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)
運行結果
函數解析

to_json(path_or_buf,orient,encoding,index) 前三個參數和read_json()里的一樣 index:False則選擇不寫入索引,默認為True。

號外加餐

利用json模版的loads()與dumps()方法也可以實現json文件的讀寫。

之前的一篇文章有詳細介紹,Python與Json之間的數據交互

送你的話

最近事情特多,公眾號,學習,學校,寒假班,寒假安排。。。一堆事情,所以原創更新的比較慢,後面我想開一些基於Python視頻課程,感覺說話比寫文章簡單,寫這麼一篇簡單的文章得花我半天多的時間,而且累,所以希望大家多多支持。

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

【完】