1

目的:

csvファイルからの既存の価格データのセットに対応するインデックスを作成します。リスト内包表記を使用してインデックスを作成できます。そのように行われた場合、構築により、長さ86,772のフィルターされたリストが得られます。これは、2007年1月3日から2012年8月30日までの42回(つまり、10分間隔)で実行された場合です。ただし、csvから取得した価格のデータの長さは62,034です。長さの違いはデータクリーニングの問題によるものであることに注意してください。

とはいえ、実際のデータとこの事前に構築された(リストコンプ)データフレームとの間の明らかな不一致をどのように克服するかはわかりません。

試み:

最初の2行を間違って使用していますか?

data=pd.read_csv('___.csv', parse_dates={'datetime':[0,1]}).set_index('datetime')

dt_index = pd.DatetimeIndex([datetime.combine(i.date,i.time) for i in data.index])

ts = pd.Series(data.prices.values, dt_index)

質問:

  1. 私が理解しているように、インデックスの構築をcsvファイルで完全に通知したいので、「combine」を使用する必要があります。また、「combine」は、日付コンポーネントが指定された日付オブジェクトと等しく、時間コンポーネントが指定された時間オブジェクトと等しい新しい日時オブジェクトを返します。

  2. parse_datesを実行すると、時刻と日付がひとまとめにされ、「日付」と見なされますか?

  3. 述べられた目的を達成するためのより良い方法はありますか?

トレースバックエラー:

AttributeError:'unicode'オブジェクトに属性'date'がありません

4

1 に答える 1

2

これを次のようにきれいに書くことができます。

ts = df1.prices

次に例を示します。

In [1]: df = pd.read_csv('prices.csv',
                  parse_dates={'datetime': [0,1]}).set_index('datetime')

In [2]: df # dataframe
Out[2]: 
                    prices  duty
datetime                 
2012-11-12 10:00:00      1     0
2012-12-12 10:00:00      2     0
2012-12-12 10:00:00      3     1


In [3]: df.prices # timeseries
Out[3]: 
datetime
2012-11-12 10:00:00    1
2012-12-12 10:00:00    2
2012-12-12 11:00:00    3
Name: prices

In [4]: ts = df.prices

次のように日付をグループ化できます(docs のこの例と同様):

In [5]: key = lambda x: x.date()

In [6]: df.groupby(key).sum()
Out[6]: 
            prices  duty
2012-11-12       1     0
2012-12-12       5     1

In [7]: ts.groupby(key).sum()
Out[7]: 
2012-11-12    1
2012-12-12    5

price.csvの内容は次のとおりです。

date,time,prices,duty
11/12/2012,10:00,1,0
12/12/2012,10:00,2,0
12/12/2012,11:00,3,1
于 2012-12-11T21:46:32.007 に答える