0

私はPythonが初めてで、クロールプロジェクトを進めています。いくつかの pandas モジュールに関して 2 つの質問があります。

以下は私のデータテーブル「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つ不足していることを示しています:「キー」。「2017-01-01」から昨日までの毎日の日付としてインデックスを設定することは可能ですか?

それが解決された後、「apple」や「banana」などの「js」データを列として配置し、各値を df インデックス日付に関して配置しようとしています。この例では「リンゴ」と「バナナ」の列のみを示していますが、実際のデータ セットにはさらに数千の列があります...

私の問題を解決する効率的な方法を教えてください。前もって感謝します!

--------------EDIT------------------------ 日付のインデックス作成は @ で完璧に機能します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)

1 つの問題は、別のデータフレーム「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_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)
于 2017-11-29T01:27:32.820 に答える