我在组合两个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。我需要将日期转换为整数吗?
由于
答案 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)