2013-09-22 286 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