2014-11-06 21 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

相关问题