我有这个网站,需要登录访问数据。
import pandas as pd
import requests
r = requests.get(my_url, cookies=my_cookies) # my_cookies are imported from a selenium session.
df = pd.io.excel.read_excel(r.content, sheetname=0)答复:
IOError: [Errno 2] No such file or directory: 'Ticker\tAction\tName\tShares\tPrice\...显然,str是作为文件名称处理的。有办法把它作为文件处理吗?或者,我们可以把饼干传递给pd.get_html吗?
编辑:经过进一步的处理,我们现在可以看到这实际上是一个csv文件。下载文件的内容如下:
In [201]: r.content
Out [201]: 'Ticker\tAction\tName\tShares\tPrice\tCommission\tAmount\tTarget Weight\nBRSS\tSELL\tGlobal Brass and Copper Holdings Inc\t400.0\t17.85\t-1.00\t7,140\t0.00\nCOHU\tSELL\tCohu Inc\t700.0\t12.79\t-1.00\t8,953\t0.00\nUNTD\tBUY\tUnited Online Inc\t560.0\t15.15\t-1.00\t-8,484\t0.00\nFLXS\tBUY\tFlexsteel Industries Inc\t210.0\t40.31\t-1.00\t-8,465\t0.00\nUPRO\tCOVER\tProShares UltraPro S&P500\t17.0\t71.02\t-0.00\t-1,207\t0.00\n'注意,它是由制表符分隔的。尽管如此,仍在努力:
# csv version 1
df = pd.read_csv(r.content)
# Returns error, file does not exist. Apparently read_csv() is also trying to read it as a file.
# csv version 2
fh = io.BytesIO(r.content)
df = pd.read_csv(fh) # ValueError: No columns to parse from file.
# csv version 3
s = StringIO(r.content)
df = pd.read_csv(s)
# No error, but the resulting df is not parsed properly; \t's show up in the text of the dataframe.发布于 2015-06-21 05:13:29
只需将文件内容包装在BytesIO中即可。
with io.BytesIO(r.content) as fh:
df = pd.io.excel.read_excel(fh, sheetname=0)发布于 2015-06-21 04:56:26
这个功能从2014年起被包含在一个更新中。根据文档,它只需提供url:
字符串可能是一个URL。有效的URL方案包括http、ftp、s3和file。对于文件URL,需要主机。例如,本地文件可以是file://localhost/path/to/workbook.xlsx。
根据您提供的代码,看起来您使用的是熊猫0.13.x吗?如果您可以升级到较新的版本(下面的代码用0.16.x测试),您可以在不额外使用requests库的情况下使其工作。这是在0.14.1中添加的。
data2 = pd.read_excel(data_url)作为完整脚本的示例(示例XLS文档取自原虫报告,声明read_excel不接受read_excel):
import pandas as pd
data_url = "http://www.eia.gov/dnav/pet/xls/PET_PRI_ALLMG_A_EPM0_PTC_DPGAL_M.xls"
data = pd.read_excel(data_url, "Data 1", skiprows=2)https://stackoverflow.com/questions/30961190
复制相似问题