【问题标题】:Append multiple columns into two columns python将多列追加到两列python
【发布时间】:2017-12-14 01:39:36
【问题描述】:

我有一个包含大约 100 列数据的 csv 文件。每列代表 100 天中每一天每 15 分钟采集的温度值。每列的标题是当天的日期。我想将其转换为两列,第一列是日期时间(我必须以某种方式创建它),第二列是每天堆叠在一起的温度。

我的尝试:

 with open("original_file.csv") as ofile:  
    stack_vec = []
    next(ofile) 
    for line in ofile:             
        columns = lineo.split(',') # get all the columns         
        for i in range (0,len(columns)):
            stack_vec.append(columnso[i])
            np.savetxt("converted.csv",stack_vec, delimiter=",", fmt='%s') 

在我的尝试中,我试图创建一个新向量,每列都附加到它的末尾。但是,代码非常慢,可能无法正常工作!一旦我弄清楚了这一步,我就需要从每一列中获取日期,并将每行的日期时间添加 15 分钟。任何帮助将不胜感激。

【问题讨论】:

  • 对于 .csv,我总是推荐使用 numpy 函数“genfromtext”。 csvData = genfromtxt('original_file.csv', delimiter=',') 之后,您可以像使用任何其他 numpy 数组一样使用 csvData,而不必担心行尾字符等问题。此外,它应该很快。 “可能不工作”是什么意思?
  • 感谢您的提示。可能不工作,我的意思是程序正在运行但没有完成。我在大约 5 分钟左右后终止它。
  • 我明白了。让我印象深刻的一件事是,您的循环中有 np.savetxt 覆盖所有 100 列。所以同一个文件被一次又一次地保存。无论如何,您应该考虑马文的回答。他也使用 genfromtext 并详细解释了您将如何在您的情况下使用它。

标签: python csv append


【解决方案1】:

如果我猜对了,您有一个 96 行和 100 列的 csv,并且希望日复一日地堆叠到一个向量中,成为一个具有 960 个条目的向量,对吗?

一个简单的方法是使用 numpy:

    import numpy as np 

    x = np.genfromtxt('original_file.csv', delimiter=',')
    data = x.ravel(order ='F')

注意 numpy 是一个第三方库,但却是数学的首选库。 第一行会将 csv 读入一个类似于矩阵的ndarray(即使它在数学运算中表现不同)

然后用ravel 向量化它。 oder 是这样的,它可以将行堆叠在一起而不是列,即日复一日。 (如果您想要一个接一个的时间点,请将其保留为默认值/空白)

对于您的日期问题,请参阅How can I make a python numpy arange of datetime 我想我无法举出更好的例子。

如果您有这两个数组,您可以通过x.reshape(960,1) 确保形状,然后将它们与np.concatenate([x,dates], axis = 1 ) 堆叠在一起,日期是您的日期向量。

【讨论】:

    猜你喜欢
    • 2017-02-06
    • 2013-11-08
    • 2018-03-01
    • 2021-01-09
    • 1970-01-01
    • 2020-08-08
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    相关资源
    最近更新 更多