合并列熊猫

时间:2014-02-12 01:02:25

标签: python pandas

我在组合两个pandas数据帧列时遇到问题。

我试过了

df.apply(lambda row: datetime.datetime(row['Date'], row['Time']), axis=1)

但是给了我错误:

TypeError: ('integer argument expected, got float', u'occurred at index 0')

我的数据如下:

     Date  Time     Open     High      Low    Close     Volume  
0  19980102   959  73.3678  73.3678  73.3678  73.3678   6619.390   
1  19980102  1000  73.3678  73.3678  73.3377  73.3377    794.326   
2  19980102  1001  73.2848  73.2848  73.2697  73.2697    264.775   
3  19980102  1002  73.2697  73.2697  73.2697  73.2697   7943.260   
4  19980102  1003  73.2697  73.2697  73.2697  73.2697  19858.200   

请注意,我在读取数据时已将所有内容转换为浮动状态。我正在使用linecache.getline逐行读取,它返回每行的整个字符串。然后我使用.split(',')来解决这个问题。但之后无法转换为datetime。我需要将日期转换为整数吗?

由于

2 个答案:

答案 0 :(得分:0)

我认为你可以这样做:

In [41]
df['datetime']=map(datetime.datetime, 
    df['Date']/10000, 
    (df['Date']-df['Date']/10000*10000)/100,
    df['Date']%100, df['Time']/100, df['Time']%100,)

In [42]:
print df

       Date  Time     Open     High      Low    Close     Volume  \
0  19980102   959  73.3678  73.3678  73.3678  73.3678   6619.390   
1  19980102  1000  73.3678  73.3678  73.3377  73.3377    794.326   
2  19980102  1001  73.2848  73.2848  73.2697  73.2697    264.775   
3  19980102  1002  73.2697  73.2697  73.2697  73.2697   7943.260   
4  19980102  1003  73.2697  73.2697  73.2697  73.2697  19858.200   

             datetime  
0 1998-01-02 09:59:00  
1 1998-01-02 10:00:00  
2 1998-01-02 10:01:00  
3 1998-01-02 10:02:00  
4 1998-01-02 10:03:00  

如果您的'Date''Time'都是float64,则首先需要这两行:

df['Date']=df['Date'].astype('int64')
df['Time']=df['Time'].astype('int64')

答案 1 :(得分:0)

test = pd.DataFrame(data={
    'a' : [1,2,3],
    'b' : [2,3,4]
})
test['combine'] = test[['a','b']].apply(lambda x: pd.Series([x.values]), axis=1)