从url读取.csv时,起始行的标题较少

2024-04-26 05:32:41 发布

您现在位置:Python中文网/ 问答频道 /正文

我想从this website下载一个.csv文件(直接下载csv,here)。我面临的问题是,我要开始导入的行的列数少于后面部分中的行数,我就是不知道如何读入

实际上,这个csv文件并不漂亮

enter image description here

以下是我想在熊猫中导入csv的方式:

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

  2. 各节之间的单独数据框(使用for循环,在有空行的地方分开)

  3. 在其他列中存储JPX代码(如16509005)和仪器(如FUT_TOPIX_2009)

  4. 设置标题['institutions\u sell\u code'、'institutions\u sell'、'institutions\u sell\u eng'、'amount\u sell'、'institutions\u buy\u code'、'institutions\u buy\u eng'、'amount\u buy'、'JPX\u code'、'instrument']

因此,预期结果将是:

enter image description here

这是我的尝试。我首先尝试将整个数据读入熊猫:

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代码和工具包含行

enter image description here


Tags: 文件csv数据代码ioimportcodebuy
1条回答
网友
1楼 · 发布于 2024-04-26 05:32:41

Pandas并不像您所拥有的那样在一个CSV文件中真正支持多个文档。为了解决这个问题,我采取了两个步骤,效果很好:

  1. 调用read_csv(usecols=[0])一次以读取最左边的列。使用此选项确定每个表的开始和结束位置
  2. 只使用open()打开文件一次,对于步骤1中确定的每个表,使用适当的值调用read_csv(skiprows=SKIP, nrows=ROWS),一次读取一个表。这是关键:只让熊猫读取正确的矩形行,它不会因为CSV文件的不卫生性质而生气

只打开一次文件是一种优化,以避免每次执行步骤2时反复扫描文件。如果在开始步骤2之前seek(0)返回到开头,那么实际上也可以在步骤1中使用相同的打开文件对象

相关问题 更多 >