我正在尝试对一组类似的数据帧执行一组重复操作(在此示例中,将时间戳字符串转换为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)
是否有一些明显缺失的东西,或者整个方法是否拙劣,我应该尝试字典路线?
谢谢,
答案 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)