2017-03-29 13 views
0

類似のデータフレーム(この例では、タイムスタンプの文字列をdatetimeオブジェクトに変換する)に対して一連の繰り返し操作を実行しようとしています。 私の元データフレーム:変数付きアドレス指定によるPandasデータフレームのループ処理

 Date_assetA assetA Date_assetB assetB Date_assetC assetC \ 
0 06/09/16 8:00 4629.0 06/09/16 5:50 208.2 06/09/16 5:50 209.05 
1 06/09/16 8:10 4629.5 06/09/16 6:00 208.0 06/09/16 6:00 208.85 
2 06/09/16 8:20 4630.0 06/09/16 6:10 208.1 06/09/16 6:10 208.95 
3 06/09/16 8:30 4632.5 06/09/16 6:20 208.1 06/09/16 6:20 208.95 
4 06/09/16 8:40 4630.5 06/09/16 6:30 208.1 06/09/16 6:30 208.95 

    Date_assetD assetD 
0 06/09/16 5:50 209.70 
1 06/09/16 6:00 209.50 
2 06/09/16 6:10 209.60 
3 06/09/16 6:50 209.55 
4 06/09/16 7:10 209.65 

私はタイムスタンプにDate_assetX列を変換した後、これらを合わせる必要がありますように私は、最初の1から4つの独立したデータフレームを構築します。私はそれらを資産のリストを使用して検索してループしたいと思う。私のコードは、欠けている部分です。 df_assetXの名前を連結などの任意の試みはこれまで失敗しました:

import pandas as pd 

df = pd.read_csv('example.csv') 

df_assetA = df[['Date_assetA', 'assetA']] 
df_assetB = df[['Date_assetB', 'assetB']] 
df_assetC = df[['Date_assetC', 'assetC']] 
df_assetD = df[['Date_assetD', 'assetD']] 

contract_list = ['assetA', 'assetB', 'assetC', 'assetD'] 
for contract in contract_list: 
    date_column = 'Date_' + str(contract) 
    df_contract = # That's the part where i'm stuck... 
    df_contract.date_column = pd.to_datetime(df_contract.date_column, dayfirst=True) 

iが欠けている明白なものがある、または全体的なアプローチがしくじったと私は代わりに、辞書のルートを試してみてくださいますか?

ありがとう、

+0

私は連結したいものが理解できませんでしたが、元のdfの日付列を解析しないのはなぜですか? – gereleth

+0

@gereleth、私は契約のリストをループしたいと思います。それぞれについて、df_ という名前のdfとその列Date_ で作業します。 – error404

答えて

0

代わりに辞書を使用しました。確かにこのコードは、ループを使って辞書を構築するために改良することができますが、私の現在のニーズに合わせて、今のところそれをカットします。

import pandas as pd 

df = pd.read_csv('example.csv') 

df_assetA = df[['Date_assetA', 'assetA']] 
df_assetB = df[['Date_assetB', 'assetB']] 
df_assetC = df[['Date_assetC', 'assetC']] 
df_assetD = df[['Date_assetD', 'assetD']] 

dico = {'assetA':df_assetA, 
     'assetB':df_assetB, 
     'assetC':df_assetC, 
     'assetD':df_assetD} 

for contract, df_contract in dico.items(): 
    Date_contract = 'Date_' + contract 
    df_contract[Date_contract] = pd.to_datetime(df_contract[Date_contract], dayfirst=True) 
    print df_contract.head() 
0

私が通常行っていることは、データフレームのリストを作成して、一度にすべて連結することです。

Frames = [] 
# Start the loop 
for contract in contract_list: 
    df = ... # Do whatever 
    Frames.append(df) 
# Concat 
All = pd.concat(Frames) 
関連する問題