簡體   English   中英

pandas 從 url 讀取 csv,起始行的 Z099FB995346F31C7549F6E40EDB0ZFZ 較少

[英]pandas read .csv from url, starting row has fewer header

我想從這個網站下載一個.csv文件(直接下載csv, 在這里)。 我面臨的問題是,我要開始導入的行的列比后面部分的行少,我只是不知道如何讀入 pandas。

確實,這個 csv 文件相當不美觀。

在此處輸入圖像描述

這是我想在 pandas 中導入 csv 的方式:

  1. 忽略有“交易日期”的第一行

  2. 部分之間的單獨數據框(使用for循環,只要有空白行就分開)

  3. 將 JPX 代碼(例如 16509005)和儀器(例如 FUT_TOPIX_2009)存儲在附加列中。

  4. 設置標題 ['institutions_sell_code'、'institutions_sell'、'institutions_sell_eng'、'amount_sell'、'institutions_buy_code'、'institutions_buy'、'institutions_buy_eng'、'amount_buy'、'JPX_code'、'instrument']

所以預期的結果將是:

在此處輸入圖像描述

這是我的嘗試。 我首先嘗試將整個數據讀入 pandas:

import io
import pandas as pd
import requests
url = 'https://www.jpx.co.jp/markets/derivatives/participant-volume/nlsgeu000004vd5b-att/20200730_volume_by_participant_whole_day_J-NET.csv'
s=requests.get(url).content
colnames = ['institutions_sell_code', 'institutions_sell', 'institutions_sell_eng', 'amount_sell', 'institutions_buy_code', 'institutions_buy', 'institutions_buy_eng', 'amount_buy']
df=pd.read_csv(io.StringIO(s.decode('utf-8')), header=1, names = colnames)

ParserError: Error tokenizing data. C error: Expected 2 fields in line 6, saw 8

我認為這是因為 header=1 只有兩列,而其他行有八列。 事實上,當我設置header=2以排除 JPX 代碼和儀器時,它可以工作。 那么如何在 JPX 代碼和儀器中包含該行?

在此處輸入圖像描述

Pandas 並不像您那樣真正支持一個 CSV 文件中的多個文檔。 我為解決這個問題所做的工作很好,需要兩個步驟:

  1. 調用read_csv(use_cols=[0])一次以讀取最左邊的列。 使用它來確定每個表的開始和結束位置。
  2. 僅使用open()打開文件一次,對於步驟 1 中確定的每個表,調用read_csv(skiprows=SKIP, nrows=ROWS)並使用適當的值一次讀取一個表。 這是關鍵:只讓 Pandas 讀取正確的矩形行,它不會對 CSV 文件的不衛生性質感到憤怒。

只打開一次文件是一種優化,以避免每次執行步驟 2 時一遍又一遍地掃描它。實際上,您也可以在步驟 1 中使用相同的打開文件 object,如果您seek(0)回到開頭之前開始第 2 步。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM