0

我是 Python 的新手,正在完成我的爬行项目。关于几个熊猫模块,我有两个问题。

下面是我的数据表“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”列,但在我的真实数据集中,我还有数千个......

请让我知道解决我的问题的有效方法。提前致谢!

------------------EDIT------------------------ 日期索引与@完美配合冷速回答。

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
4

1 回答 1

1

您可以使用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)
于 2017-11-29T01:27:32.820 回答