2014-02-12 57 views
2

我有两个熊猫数据框列结合的问题。组合列大熊猫

我已经试过

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(',')来解决这个问题。但之后无法转换为日期时间。我是否需要将日期转换为整数?

感谢

+0

有你正在读这样的行吗?使用'read_csv()'你可以通过'parse_dates = [['Date','Time']]'这两列将被合并成一个Datetime列。你可能需要编写一个自定义的'date_parser'函数。 – TomAugspurger

+0

我有一个巨大的csv文件,但我不需要所有的行... – user1234440

回答

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') 
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)