python - 使用 for 循环在 pandas 中附加多个数据帧

标签 python pandas dataframe for-loop

我正在使用 pd.read_html 从网络上读取表格,并在 pandas 中使用 for 循环从多个数据帧创建单个数据帧。我能够为任何给定年份成功创建数据框,但我在 for 循环中缺少正确的逻辑:

(1)读取数据, (2) 创建数据框 (3) 进入下一年 (4) 将该数据帧附加到先前的数据帧。

理想的结果应该是 1 个具有约 500 行和 13 列的数据框(相当于 2 年的数据)。谢谢!

for x in range(2017, 2019):  
    dfs = pd.read_html('https://www.treasury.gov/resource-center/data-chart-center/interest-rates/pages/TextView.aspx?data=yieldYear&year=(%d)' % x, skiprows=1) 
    for df in dfs:
        print df
DateList = ['Date', '1 mo', '2 mo', '3 mo', '6 mo', '1 yr', '2 yr', '3 yr', '5 yr', '7 yr', '10 yr', '20 yr', '30 yr']
df.columns = DateList

最佳答案

考虑构建一个数据框列表,然后在循环外连接项目。具体来说,下面使用了一个列表理解,它还在每次迭代中分配列,后跟一个 pd.concat。打电话。

url = 'https://www.treasury.gov/resource-center/data-chart-center/interest-rates/' + \
      'pages/TextView.aspx?data=yieldYear&year=({yr})'

DateList = ['Date', '1 mo', '2 mo', '3 mo', '6 mo', '1 yr', '2 yr',
            '3 yr', '5 yr', '7 yr', '10 yr', '20 yr', '30 yr']

dfs = [(pd.read_html(url.format(yr=x), skiprows=1)[1]
          .set_axis(DateList, axis='columns', inplace=False)) for x in range(2017, 2019)]

final_df = pd.concat(dfs, ignore_index=True)

print(final_df.head())
#        Date  1 mo  2 mo  3 mo  6 mo  ...    5 yr  7 yr  10 yr  20 yr  30 yr
# 0  01/03/17  0.52   NaN  0.53  0.65  ...    1.94  2.26   2.45   2.78   3.04
# 1  01/04/17  0.49   NaN  0.53  0.63  ...    1.94  2.26   2.46   2.78   3.05
# 2  01/05/17  0.51   NaN  0.52  0.62  ...    1.86  2.18   2.37   2.69   2.96
# 3  01/06/17  0.50   NaN  0.53  0.61  ...    1.92  2.23   2.42   2.73   3.00
# 4  01/09/17  0.50   NaN  0.50  0.60  ...    1.89  2.18   2.38   2.69   2.97

关于python - 使用 for 循环在 pandas 中附加多个数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53926323/

相关文章:

python - 模式到子类 logging.Logger

Python:有没有一种线程安全的方法来知道lock.acquire()是否已阻塞(并继续阻塞)?

python - Pandas 组中的唯一值

python - 在 Pandas 数据框中找到条纹

python - 为 pandas 列中的每个项目获取下一个 x 值并将它们放入相邻行

python - 如何组合所有 3 合 1 re.findall() ??(python 2.7 && 正则表达式)

python - 开发一个用于将数据信息输出到特定范围的 Excel 行和列的计数器?

python - 在 Pandas 中使用 data.info() 显示所有信息

python - 给定列名称列表,将包含列表的多个列合并为一列

python - Statsmodels:从 VARMAX.fit() 获取误差相关矩阵