2013-09-22 322 views
1

我有一個熊貓數據幀像下面熊貓據幀合併列

Year Month Day Securtiy Trade Value NewDate 
2011  1 10  AAPL Buy 1500  0 

我的問題是,我怎麼能合併列YearMonthDay成列NewDate 使得newDate列如下所示

2011-1-10 

回答

1

最好的辦法是將它解析爲CSV閱讀時:

In [1]: df = pd.read_csv('foo.csv', sep='\s+', parse_dates=[['Year', 'Month', 'Day']]) 

In [2]: df 
Out[2]: 
     Year_Month_Day Securtiy Trade Value NewDate 
0 2011-01-10 00:00:00  AAPL Buy 1500  0 

在閱讀你可以做到這一點沒有頭,通過定義列名:

pd.read_csv(input_file, header=['Year', 'Month', 'Day', 'Security','Trade', 'Value' ], parse_dates=[['Year', 'Month', 'Day']]) 

如果它已經在你的數據框,你可以使用一個應用:

In [11]: df['Date'] = df.apply(lambda s: pd.Timestamp('%s-%s-%s' % (s['Year'], s['Month'], s['Day'])), 1) 

In [12]: df 
Out[12]: 
    Year Month Day Securtiy Trade Value NewDate    Date 
0 2011  1 10  AAPL Buy 1500  0 2011-01-10 00:00:00 
+0

不幸的是,我輸入的csv文件沒有標題。我必須添加headers.df.columns = ['Year','Month','Day','Security','Trade','Value']。所以,我必須重新格式化數據框以實現YYYY-MM-DD到Newdate列 – trinity

+0

@trinity中的串聯,您還可以從位置so [[0,1,2]]執行此操作,或者在使用頭文件的參數爲read_csv –

+0

您的意思是,df = pd.read_csv(input_file,header = None,parse_dates = [[0,1,2]])?? – trinity

1

DF ['Year'] +' - '+ df ['Month'] +' - '+ df ['Date']

0

您可以創建一個新的時間戳,如下所示:

df['newDate'] = df.apply(lambda x: pd.Timestamp('{0}-{1}-{2}' 
               .format(x.Year, x.Month, x.Day), 
            axix=1) 

>>> df 
    Year Month Day Securtiy Trade Value NewDate newDate 
0 2011  1 10  AAPL Buy 1500  0 2011-01-10