python - Pandas 使用 for 循环连接数据帧

标签 python python-3.x pandas for-loop web-scraping

我正在尝试从网站获取表格。该网站的 URL 包含日期,因此我必须迭代日期才能获取历史数据。我生成日期如下:

import datetime

start = datetime.datetime.strptime("26-09-2016", "%d-%m-%Y")
end = datetime.datetime.strptime("30-09-2016", "%d-%m-%Y")
date_generated = [start + datetime.timedelta(days=x) for x in range(0, (end-start).days)]

dates_list = []
for date in date_generated:
    txt = str(str(date.day) + '.' + str(date.month) + '.' + str(date.year))
    dates_list.append(txt)

dates_list

此后,我运行下面的代码来连接所有表:

for i in range(0, 3):
    allURL = 'https://www.uzse.uz/trade_results?date=' + dates_list[i] + '&locale=en&mkt_id=ALL&page=%d'

    ndf_list = []
    for i in range(1, 100):
        url = allURL %i
        if pd.read_html(url)[0].empty:
            break
        else :
            ndf_list.append(pd.read_html(url)[0])

    ndf = pd.concat(ndf_list)
    ndf.insert(0, 'Date', dates_list[i])

mdf = pd.concat(ndf, ignore_index = True)
mdf

但是,这不起作用,我得到:

类型错误:第一个参数必须是 pandas 对象的可迭代对象,您传递了“DataFrame”类型的对象

我不明白我做错了什么。我预计会收到 9 月 26 日、27 日和 28 日的一张 table 。

请帮忙。

最佳答案

不确定最后一行,但我会这样处理

import datetime
import pandas as pd

start = datetime.datetime.strptime("26-09-2016", "%d-%m-%Y")
end = datetime.datetime.strptime("30-09-2016", "%d-%m-%Y")
date_generated = [
    start + datetime.timedelta(days=x) for x in range(0, (end-start).days)]

dates_list = []
for date in date_generated:
    txt = str(str(date.day) + '.' + str(date.month) + '.' + str(date.year))
    dates_list.append(txt)

dates_list

ndf = pd.DataFrame()  # create empty ndf
for i in range(0, 3):
    allURL = 'https://www.uzse.uz/trade_results?date=' + \
        dates_list[i] + '&locale=en&mkt_id=ALL&page=%d'

    # ndf_list = []
    for j in range(1, 100):
        url = allURL % j
        if pd.read_html(url)[0].empty:
            break
        else:
            # ndf_list.append(pd.read_html(url)[0])
            chunk = pd.read_html(url)[0]
            chunk['Date'] = dates_list[i] # Date is positioned at last position, let's fix that
            # get a list of all the columns
            cols = chunk.columns.tolist()
            # rearrange the columns, move the last element (Date) to the first position
            cols = cols[-1:] + cols[:-1]
            # reorder the dataframe
            chunk = chunk[cols]
            ndf = pd.concat([ndf, chunk])

    # ndf = pd.concat(ndf_list)

# ndf.insert(0, 'Date', dates_list[i])

print(ndf)
# mdf = pd.concat(ndf, ignore_index=True)
# mdf

关于python - Pandas 使用 for 循环连接数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54395031/

相关文章:

python - 根据该点的值绘制一个非方阵

python - 当我运行该程序时,我不断收到此错误。我已经尝试了我能想到的一切,但仍然不起作用

python - Pandas 数据框中多列的加权平均值

python通过偏移轮廓/缩小多边形来分离圆形粒子

python - 来自常量的 Django 模型字段?

python - 如何用Python实时绘制每秒15000点连续读取的数据?

python-3.x - Python - 如何使用 += 返回 for 循环

python - 人脸检测,未检测到人脸

python - 使用 Heroku 部署时如何解决 "' django_content_type' does not exit” 错误?

python - PDFMiner 版本差异?获取 AttributeError : 'PDFDocument' object has no attribute 'seek'