Pandas 索引设置和向列中导入值

Pandas index setting and importing values to columns

我是 Python 的新手,正在努力完成我的爬虫项目。我有两个关于 few pandas 模块的问题。

下面是我的数据table"js"

              apple     banana
period      
2017-01-01  100.00000   22.80130
2017-02-01  94.13681    16.28664
2017-03-01  85.34201    13.68078
2017-04-01  65.79804    9.77198
2017-05-01  43.32247    13.35504
2017-06-01  72.63843    9.44625
2017-07-01  78.82736    9.77198
2017-08-01  84.03908    10.09771
2017-09-01  90.55374    13.35504
2017-10-01  86.64495    9.12052

下面是我将苹果和香蕉值应用于新 DataFrame 的代码。

import pandas as pd
from datetime import datetime, timedelta

dd = pd.date_range('2017-01-01',datetime.now().date() - timedelta(1))
df = pd.DataFrame.set_index(dd) #this part has error

第一步是将我的 df 索引设置为 data_range('2017-01-01' 到昨天(每日))。错误消息说我缺少 1 个必需的位置参数:'keys'。是否可以将索引设置为从“2017-01-01”到昨天的每日日期?

解决后,我试图将我的 "js" 数据(例如 'apple' 和 'banana' 作为列,并将每个值与 df 索引日期相关联。此示例仅显示 'apple' 和 'banana' 列,但在我的真实数据集中,我还有数千个...

请告诉我解决问题的有效方法。提前致谢!

----------------编辑------------------------ 日期索引与@COLDSPEED 答案完美配合。

dd = pd.date_range('2017-01-01',datetime.now().date() - timedelta(1))
df.index = pd.to_datetime(df.index)   # ignore if not needed
df = df.reindex(dd, fill_value=0.0)

一个问题是,如果我有另一个数据框 "js2"(下图)并将这些数据合并到一个 df 中(上图),我相信它不会起作用。有什么建议吗?

        kiwi    mango
period      
2017-01-01  9.03614     100.00000
2017-02-01  5.42168     35.54216
2017-03-01  7.83132     50.00000
2017-04-01  10.24096    55.42168
2017-05-01  10.84337    60.84337
2017-06-01  12.04819    65.66265
2017-07-01  17.46987    34.93975
2017-08-01  9.03614     30.72289
2017-09-01  9.63855     56.02409
2017-10-01  12.65060    45.18072

您可以使用 pd.to_datetimepd.Timedelta -

idx = pd.date_range('2017-01-01', pd.to_datetime('today') - pd.Timedelta(days=1))    
idx

DatetimeIndex(['2017-01-01', '2017-01-02', '2017-01-03', '2017-01-04',
               '2017-01-05', '2017-01-06', '2017-01-07', '2017-01-08',
               '2017-01-09', '2017-01-10',
               ...
               '2017-11-18', '2017-11-19', '2017-11-20', '2017-11-21',
               '2017-11-22', '2017-11-23', '2017-11-24', '2017-11-25',
               '2017-11-26', '2017-11-27'],
              dtype='datetime64[ns]', length=331, freq='D')

然后,您可以使用 reindex 您的数据框 -

df.index = pd.to_datetime(df.index)   # ignore if not needed
df = df.reindex(idx, fill_value=0.0)

如果您的日期是日优先(日在先,然后是月),请确保在转换索引时指定 -

df.index = pd.to_datetime(df.index, dayfirst=True)