通过解决具有变量的数据帧来循环Pandas数据帧

时间:2017-03-29 03:52:06

标签: python loops pandas variables dataframe

我正在尝试对一组类似的数据帧执行一组重复操作(在此示例中,将时间戳字符串转换为datetime对象)。 我的原始数据框:

     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  

我从最初的一个构建了四个独立的DataFrame,因为我需要在将Date_assetX列转换为时间戳后对齐它们。我想通过使用资产列表来解决这些问题。这是我的代码,缺少部分。到目前为止,任何连接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)

是否有一些明显缺失的东西,或者整个方法是否拙劣,我应该尝试字典路线?

谢谢,

2 个答案:

答案 0 :(得分: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()

答案 1 :(得分:0)

我通常做的是创建一个数据帧列表,然后立即将它们连接起来。它看起来像这样:

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