【问题标题】:Print columns of Pandas dataframe to separate files + dataframe with datetime (min/sec)打印 Pandas 数据框的列以分隔文件 + 带有日期时间的数据框(分钟/秒)
【发布时间】:2015-01-02 10:14:42
【问题描述】:

我正在尝试打印 Pandas 数据框的列以在 Python 2.7 中分隔 *.csv 文件。

使用此代码,我得到一个包含 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 文件?
  • 如何获取带小时、分钟和秒的时间?如果数 rows 从 10 变为 5000,那么秒数是否会从数据帧的一行变为下一行?

编辑: - 回答 Q2 (See here) ==> 在我的特定代码的情况下,请参阅:

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

【问题讨论】:

    标签: list python-2.7 datetime pandas append


    【解决方案1】:

    我不太明白你的逻辑,但以下是一种更简单的方法:

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

    示例:

    In [41]:
    
    for col in df2:
        print('output' + col + '.csv')
    outputA.csv
    outputB.csv
    outputC.csv
    outputD.csv
    outputDate.csv
    

    【讨论】:

    • EdChum:我假设您的意思是 for 循环中的逻辑。这就是我的意思: col_headers 列表包含所有列名。如果我循环遍历它们,一次一个(通过循环),并在每次迭代中输出到 *.csv,那么我可以手动指定在每次迭代中打印哪一列。为此,我将循环计数器设置为从 0(第一个列表元素)到最后一个循环元素 range(0,len(col_headers))。此计数器规范中是否存在阻止它获取最后一个列表元素(日期)的内容?
    • 问题是您正在生成从 0 到列列表的 len 的范围,并使用索引(一个数字)来索引回 df 但这些列具有名称而不是索引所以它会失败。我的回答不那么冗长,而且是实现同一件事 IMO 的一种更直观的方式
    • EdChum:是的,我明白你的意思。您的方法有效-我刚刚对其进行了测试,它回答了我的问题。它肯定更简单。然而,令我困惑的是为什么我的方法适用于“-1”(即拾取列标题 A、B、C、D),但在删除“-1”时不起作用(即拾取列标题 A, B、C、D、日期)。这是我无法理解的部分???
    • 是的,列确实有名称,但是使用我的方法,我只是循环遍历列名 - 如果它适用于 4 列,这应该适用于所有 5 列。
    猜你喜欢
    • 2019-11-01
    • 2020-07-11
    • 2017-09-10
    • 2023-04-08
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 2020-01-21
    • 1970-01-01
    相关资源
    最近更新 更多