3

そのため、pandas モジュールを使用した Python は、matlab と R の優れたオプションのように思えます。これが、私がごく最近これに切り替えた理由です。そこにはリソースがあり、フォーラムを検索しましたが、同様のものは見つかりませんでした. チュートリアルやその他の有用な資料へのリンクがある場合は、投稿してください。

Wes McKinney は、パンダに関する優れた精巧なチュートリアルを提供しています。 http://www.youtube.com/watch?v=w26x-z-BdWQ&list=FLJ5xKwlfj7wg8S_A5SgR6Wg&feature=mh_lolz

1:10 で、整数ではなく日付でデータフレーム内の行にインデックスを付ける方法の例を示しています。私は似たようなことをしたいと思います。

違いは、3 つの変数 Y1、Y2、Y3 があり、それぞれにタイムスタンプ X1、X2、X3 の列があることです。

TestFile.txt:  
X1  Y1  X2  Y2  X3  Y3
27/11/2012  11.436  29/11/2012  20.631  4/12/2012   10.209  
28/11/2012  11.468  30/11/2012  20.185  5/12/2012   9.973  
29/11/2012  11.414  3/12/2012   19.962  6/12/2012   9.736  
30/11/2012  11.355  4/12/2012   19.562  7/12/2012   9.509  
3/12/2012   11.309  5/12/2012   18.908  10/12/2012  9.259  
4/12/2012   11.118  6/12/2012   18.288  11/12/2012  8.109  
5/12/2012   10.873  7/12/2012   17.973  
6/12/2012   10.582  10/12/2012  17.788  
7/12/2012   10.264  11/12/2012  17.554  
10/12/2012  9.886  
11/12/2012  9.164  

4つのことをしたい場所:

  1. i = 1,2,3 の場合、Xi の日付で Yi のデータを関連付けます。

  2. 日付で行にインデックスを付ける

  3. Y3 の最初の日付である 2012 年 4 月 12 日より古いすべてのデータを削除します。

  4. 日付と列のみですべての日付にアクセスできる

以下は、データの読み取り方法と印刷方法を説明するテスト ファイルです。X1 は pandas の日付形式に正しく解析されていますが、X2 や X3 は正しく解析されていないことがわかります。
これは、index_col=[0,2,4]および
parse_dates = Trueを指定して実行しようとしたことです

TestFile.py:
import pandas as pd

df = pd.read_csv('TestFile.txt',sep='\t', index_col=[0,2,4], parse_dates = True)

print 'pandas version: ', pd.__version__
print df

出力を与えます:

pandas version:  0.10.0b1
X1         X2         X3              Y1      Y2      Y3                   
2012-11-27 29/11/2012 4/12/2012   11.436  20.631  10.209
2012-11-28 30/11/2012 5/12/2012   11.468  20.185   9.973
2012-11-29 3/12/2012  6/12/2012   11.414  19.962   9.736
2012-11-30 4/12/2012  7/12/2012   11.355  19.562   9.509
2012-03-12 5/12/2012  10/12/2012  11.309  18.908   9.259
2012-04-12 6/12/2012  11/12/2012  11.118  18.288   8.109
2012-05-12 7/12/2012  None        10.873  17.973     NaN
2012-06-12 10/12/2012 None        10.582  17.788     NaN
2012-07-12 11/12/2012 None        10.264  17.554     NaN
2012-10-12 None       None         9.886     NaN     NaN
2012-11-12 None       None         9.164     NaN     NaN

必要な出力:

                Y1      Y2       Y3                 
2012-04-12  11.118  19.562   10.209
2012-05-12  10.873  18.908    9.973
2012-06-12  10.582  18.288    9.736
2012-07-12  10.264  17.973    9.509
2012-10-12   9.886  17.788    9.259
2012-11-12   9.164  17.554    8.109

これを行う方法について何か考えがある場合は、助けていただければ幸いです:)

4

2 に答える 2

3

あなたの混乱は、index_col議論についての誤解によるものだと思います。列のリストを に渡すとindex_col、パンダはマルチインデックス、つまり多次元テーブルのように複数の列をインデックスとして持つデータフレームを作成しようとしています。複数の列を連結して単一のインデックスを作成しようとしているわけではありません。

機能する戦略の 1 つは、入力ファイルから適切な列のペアを使用して 3 つのデータフレームを作成し、それらを連結することです。

X1 Y1 X2 Y2 X3 Y3 --> (X1, Y1) のデータフレーム + (X2, Y2) のデータフレーム + (X3, Y3) のデータフレーム

Pandas の最新の開発バージョンを使用している場合、または使用する意思がある場合、これは の新しいparse_cols引数を使用することで簡素化されread_csv()ます。または、すべてのデータを読み込んで、必要な 3 つのデータフレームを抽出し、それらを連結することもできます。

最後に、引数と引数を使用df.truncateして、必要な DateRange を取得できます。もっと簡単に言えば、欠損値のある日付を省略するために使用できます。beforeafterdropna()

お役に立てれば。使用しているパンダのバージョンをお知らせください。

于 2012-12-13T18:08:32.007 に答える
2

設定index_col=[0,2,4]することで MultiIndex を作成しているため、その出力が得られます。

必要な出力については、 read_csv はその場でこれを行うことができません。シングルを読み取ってデータフレームをマージするだけです

于 2012-12-13T18:08:12.457 に答える