我想从this website下载一个.csv文件(直接下载csv,here)。我面临的问题是,我要开始导入的行的列数少于后面部分中的行数,我就是不知道如何读入
实际上,这个csv文件并不漂亮
以下是我想在熊猫中导入csv的方式:
忽略有“交易日期”的第一行
各节之间的单独数据框(使用for循环,在有空行的地方分开)
在其他列中存储JPX代码(如16509005)和仪器(如FUT_TOPIX_2009)
设置标题['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']
因此,预期结果将是:
这是我的尝试。我首先尝试将整个数据读入熊猫:
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文件中真正支持多个文档。为了解决这个问题,我采取了两个步骤,效果很好:
read_csv(usecols=[0])
一次以读取最左边的列。使用此选项确定每个表的开始和结束位置李>open()
打开文件一次,对于步骤1中确定的每个表,使用适当的值调用read_csv(skiprows=SKIP, nrows=ROWS)
,一次读取一个表。这是关键:只让熊猫读取正确的矩形行,它不会因为CSV文件的不卫生性质而生气李>只打开一次文件是一种优化,以避免每次执行步骤2时反复扫描文件。如果在开始步骤2之前
seek(0)
返回到开头,那么实际上也可以在步骤1中使用相同的打开文件对象相关问题 更多 >
编程相关推荐