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)
EdChum:我假設你的意思是for循環中的邏輯。這就是我的意思:col_headers列表包含所有列名稱。如果我循環遍歷它們,每次迭代一次(通過循環),並在每次迭代中輸出到* .csv,那麼我可以手動指定在每次迭代中打印哪一列。爲此,我將循環計數器設置爲從0(第一個列表元素)到最後一個循環元素的範圍(0,len(col_headers))。這個計數器規範中是否有阻止它獲取最後一個列表元素(日期)的東西? – 2014-11-06 14:50:35
問題是您正在生成範圍從0到列列表的列表,並使用索引(這是一個數字)將索引重新導入到df中,但這些列具有名稱而非索引,因此將失敗。我的答案不那麼冗長,而且是一種更直觀的方式來實現同樣的事情。IMO – EdChum 2014-11-06 15:00:48
EdChum:是的,我明白你的意思了。你的方法有效 - 我只是測試它,它回答了我的問題。它絕對更簡單。然而,讓我困惑的是爲什麼我的方法使用「-1」(即拾取列標題A,B,C,D),但在我放下「-1」時不起作用(即拾取列標題A, B,C,D,日期)。這是我無法理解的部分? – 2014-11-06 15:16:28