2016-09-28 51 views
1

我試圖從數據框寫入Excel的日期中去掉時間,但一直不成功。strftime函數熊貓 - Python

奇怪的是,我可以通過使用下面的lambda和striptime函數來操作數據框,並且可以看到它的功能正在工作,我的print df6

但是,由於某些原因,當我打開Excel文件時,它顯示格式爲%m%d%y: 12:00am。我想只有日期顯示。想法?

這裏是我的代碼:

df6 = df 
workbook = writer.book 
df6.to_excel(writer, sheet_name= 'Frogs', startrow= 4, index=False) 
df6['ASOFDATE'] = df6['ASOFDATE'].apply(lambda x:x.date().strftime('%d%m%y')) 
worksheet = writer.sheets['Frogs'] 
format5 = workbook.add_format({'num_format': '0.00%'}) 
#format6= workbook.add_format({'num_format': 'mmm d yyyy'}) 
#worksheet.set_column('A:A', 18, format6) 
worksheet.set_column('B:B', 18, format5) 
worksheet.set_column('C:C', 18, format5) 
worksheet.set_column('D:D', 18, format5) 
now = datetime.now() 
date= dt.datetime.today().strftime("%m/%d/%Y") 
link_format = workbook.add_format({'color': 'black', 'bold': 1}) 
nrows = df6.shape[0] 
worksheet.write(0, 0, 'Chart4', link_format) 
worksheet.write(1, 0, 'Frogs',link_format) 
#Multiply dataframe by 100 to get out of decimals (this method is used when dates are in the picture) 
df6[df6.columns[np.all(df6.gt(0) & df6.lt(1),axis=0)]] *= 100 
print df6 
writer.save() 

回答

1

strftime的創造,後來被格式化,並根據其格式模板由Excel中顯示日期時間值的文本表示。我們可以在我們的ExcelWriter構造函數中使用date_format參數來更改此格式模板,例如:writer = pandas.ExcelWriter("test.xlsx", engine="xlsxwriter", date_format="ddmmyyyy")。我已經略微修改了您的示例:

import pandas as pd 
import datetime 
df = pd.DataFrame() 
df['ASOFDATE'] = [datetime.datetime.now() for x in xrange(3)] 
for i in xrange(3): 
    df[i] = [1,2,3] 
df6 = df 
writer = pd.ExcelWriter('test.xlsx', engine='xlsxwriter', date_format="ddmmyyyy") 
workbook = writer.book 
df6.to_excel(writer, sheet_name= 'Frogs', startrow= 4, index=False) 
worksheet = writer.sheets['Frogs'] 
format5 = workbook.add_format({'num_format': '0.00%'}) 
worksheet.set_column('B:B', 18, format5) 
worksheet.set_column('C:C', 18, format5) 
worksheet.set_column('D:D', 18, format5) 
link_format = workbook.add_format({'color': 'black', 'bold': 1}) 
worksheet.write(0, 0, 'Chart4', link_format) 
worksheet.write(1, 0, 'Frogs',link_format) 
writer.save() 

此代碼會生成一個文件,該文件具有根據指定模板格式化的日期值。

+0

@ nullop-感謝您的迴應。不幸的是,這沒有奏效。 Excel正在寫col A; 2016-01-31 00:00:00' – spacedinosaur10

+0

我用代碼示例更新了我的評論。你能檢查它是否適合你嗎?如果您將任何strftime調用應用於日期值,則可能必須將其刪除。 – nullop

+0

啊我看到了什麼可能是問題。我有那裏的strtime函數,因爲我正在使用它來處理不相關的事情 - 讓excel將當前日期寫入數據框下方。她的eis代碼。 date = dt.datetime.today()。strftime(「%m /%d /%Y」)nrows = df5.shape [0] worksheet.write(nrows + 8,0,'Data as of'+ date,link_format ) – spacedinosaur10