代码之家  ›  专栏  ›  技术社区  ›  Kang

熊猫索引设置和向列导入值

  •  0
  • Kang  · 技术社区  · 8 年前

    我是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
    

    下面是我将apple和banana值应用于新数据帧的代码。

    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_范围(“2017-01-01”到昨天(每天))。错误消息是我缺少1个必需的位置参数:“keys”。是否可以将索引设置为从“2017-01-01”到昨天的每日日期?

    解决了这个问题后,我尝试将“js”数据(如“apple”和“banana”)作为列,并将每个值相对于df索引日期。这个例子只显示了“apple”和“banana”列,但在我的真实数据集中,我还有数千个。。。

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

    ------------------编辑------------------------ 日期索引与@COLDSPEED answer完美结合。

    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
    
    1 回复  |  直到 8 年前
        1
  •  1
  •   cs95 abhishek58g    8 年前

    您可以使用 pd.to_datetime pd.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)