2014-02-12 190 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)