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