2014-06-21 160 views
1

我正在使用以下方法將寫入日期追加到文件名的csv文件中。Python:如何寫入CSV並將日期從DataFrame附加到文件名

outpath = r'C:\test' 
filename = "filename_"+(time.strftime("%Y%m%d")+".csv") 

df.to_csv(outpath + "\\" + filename) 


print outpath + "\\" + filename 

C:\test\filename_20140621.csv 

但是我遇到了一個問題,當例程穿越午夜,添加的日期不正確。

我有一個數據幀DF正確的日期,就像這樣:

df['Date/Time'].head() 
Out[54]: 

0 2014-06-20 
1 2014-06-20 
2 2014-06-20 
3 2014-06-20 
4 2014-06-20 
Name: Date/Time, dtype: object 

我想在文件名使用這個日期,但我找不到引用它

的正確方法

例如,我把這個日期在名爲「約會」只用了一列新的數據框:

date = pd.to_datetime(df['Date/Time']) 
date.head() 

Out[15]: 

0 2014-06-20 
1 2014-06-20 
2 2014-06-20 
3 2014-06-20 
4 2014-06-20 
Name: Date/Time, dtype: datetime64[ns] 

並嘗試以下操作:

filename =「filename _」+ date._slice(slice(1))+「。csv」)

...以及各種類似的東西。

任何人都可以告訴我如何設置文件名以包含來自DataFrame的日期?

任何幫助非常感謝。

回答

1

給你date系列,你可以拿第一,或至少,根據您的喜好:

>>> date.head() 
0 2014-06-20 
1 2014-06-20 
2 2014-06-20 
3 2014-06-20 
4 2014-06-20 
Name: Date/Time, dtype: datetime64[ns] 
>>> date.iloc[0].strftime("%Y%m%d") 
'20140620' 
>>> date.min().strftime("%Y%m%d") 
'20140620' 

.iloc[0]訪問的第一行(不管它的指數是0,因爲它是在這裏,或217123)和.min()掃描它們並發現最小。 (如果你知道它們都是一樣的,或者你想要的將是第一個,那麼.iloc[0]當然會比.min()更快,但是也許它們沒有排序,並且你想要最小的..或者最大的, 。與max()

然後你就可以做一個文件名即可輕鬆:

>>> datestr = date.min().strftime("%Y%m%d") 
>>> 'filename_{}.csv'.format(datestr) 
'filename_20140620.csv' 
+0

非常感謝,DSM - 完美的作品。並感謝您的解釋 - 非常有幫助 – rdh9

1

嘗試使用datetime模塊。這是你期望的嗎?

import datetime 
def _getToday(): 
     return datetime.date.today().strftime("%Y%m%d") 
outpath = r'C:\test' 
filename = "%s_%s.%s" % ("filename", _getToday() ,".csv") 

print outpath + "\\" + filename 
+0

感謝您的幫助,巴拉,但它不是今天的日期,我需要引用,這是從DataFrame /系列日期 – rdh9

1

當使用這種具有pd.ExcelWriter - 這種工作:

datestr = tdy.strftime("%Y%m%d") 

x = 'FileName_{}.xlsx'.format(datestr) 

writer = pd.ExcelWriter(x, engine= "xlsxwriter") 
相關問題