2014-11-06 16 views
0

我試圖在Python 2.7中打印一個Pandas數據框的列來分隔* .csv文件。打印Pandas數據框的列以使用datetime(min/sec)分隔文件+數據框

使用此代碼,我得到4列的數據框和日期索引:

import pandas as pd 
import numpy as np 

col_headers = list('ABCD') 
dates = pd.date_range(dt.datetime.today().strftime("%m/%d/%Y"),periods=rows) 
df2 = pd.DataFrame(np.random.randn(10, 4), index=dates, columns = col_headers) 
df = df2.tz_localize('UTC') #this does not seem to be giving me hours/minutes/seconds 

我然後刪除索引,並將其設置爲一個單獨的列:

df['Date'] = df.index 
col_headers.append('Date') #update the column keys 

在這點,我只需要打印數據框的所有5列來分隔文件。這是我曾嘗試:

for ijk in range(0,len(col_headers)): 
    df.to_csv('output' + str(ijk) + '.csv', columns = col_headers[ijk]) 

我收到以下錯誤信息:

KeyError: "[['D', 'a', 't', 'e']] are not in ALL in the [columns]" 

如果我說:

for ijk in range(0,len(col_headers)-1): 

那麼它的工作原理,但它不打印「日期'clumn。這不是我想要的。我還需要打印日期欄。

問題:

  • 我如何得到它的「日期」欄打印到* .csv文件?
  • 我如何用小時,分鐘和秒鐘得到時間?如果 行的行數從10更改爲5000,那麼秒數是否會從數據幀的一行更改爲下一行?

編輯: - 答案Q2(See here)==>在我的特殊代碼的情況下,看到這一點:

dates = pd.date_range(dt.datetime.today().strftime("%m/%d/%Y %H:%M"),periods=rows) 

回答

1

我不太明白你的邏輯,但以下一個更簡單的方法來做到這一點:

for col in df: 
    df[col].to_csv('output' + col + '.csv') 

例如:

Ch
+0

EdChum:我假設你的意思是for循環中的邏輯。這就是我的意思:col_headers列表包含所有列名稱。如果我循環遍歷它們,每次迭代一次(通過循環),並在每次迭代中輸出到* .csv,那麼我可以手動指定在每次迭代中打印哪一列。爲此,我將循環計數器設置爲從0(第一個列表元素)到最後一個循環元素的範圍(0,len(col_headers))。這個計數器規範中是否有阻止它獲取最後一個列表元素(日期)的東西? – 2014-11-06 14:50:35

+1

問題是您正在生成範圍從0到列列表的列表,並使用索引(這是一個數字)將索引重新導入到df中,但這些列具有名稱而非索引,因此將失敗。我的答案不那麼冗長,而且是一種更直觀的方式來實現同樣的事情。IMO – EdChum 2014-11-06 15:00:48

+0

EdChum:是的,我明白你的意思了。你的方法有效 - 我只是測試它,它回答了我的問題。它絕對更簡單。然而,讓我困惑的是爲什麼我的方法使用「-1」(即拾取列標題A,B,C,D),但在我放下「-1」時不起作用(即拾取列標題A, B,C,D,日期)。這是我無法理解的部分? – 2014-11-06 15:16:28

相關問題