【问题标题】:CSV file reformattingCSV 文件重新格式化
【发布时间】:2020-10-28 02:18:42
【问题描述】:

我是 python 新手,正在尝试重新格式化 CSV 文件,它没有分隔,所以所有数据都在 第一列。该文件非常大,例如 1 GB 到 excel 大。文件格式如下, 注意旧文件中的时间顺序是从最新到最旧颠倒的,想在新文件中颠倒它 从最旧到最新。

old file is
   tagname1 tagname2 value1(t)  value2(t) timestamp(t)
   tagname1 tagname2 value1(t-1)  value2(t-1) timestamp(t-1)
   tagname1 tagname2 value1(t-2)  value2(t-2) timestamp(t-2)

desired file format
   timestamp(t-2)    tagname1       tagname2   value1(t-2)    value2(t-2)
   timestamp(t-1)    tagname1       tagname2   value1(t-1)    value2(t-1)
   timestamp(t)      tagname1       tagname2   value1(t)    value2(t)

谢谢

【问题讨论】:

  • 你是说所有数据都在第一列,但你给的格式有5列?
  • 你能把整个文件加载到内存中吗(它可能需要超过文件大小)?这会让事情变得更容易......

标签: python csv file reformatting


【解决方案1】:

您可以使用awk 来完成。此命令重新排列列并按第一列排序并将结果写入new.csv

awk -F' ' '{print $5" "$1" "$2" "$3" "$4}' OFS=, "old.csv" | sort > new.csv

对于 python 解决方案,您可以使用 Python - re-ordering columns in a csv 重新排列列,但使用 sort 进行排序会更简单。

【讨论】:

    【解决方案2】:

    您可以使用知名的pandas 库来导入和修改您的.csv 文件。它非常受欢迎并且经常使用。这是一些代码:

    import pandas as pd
    
    data = pd.read_csv("file.csv", sep=" ", header=None) # 1
    data = data.iloc[::-1] # 2
    data = data[[4, 0, 1, 2, 3]] # 3
    
    data.to_csv("out.csv", sep=" ", header=None, index=None) # 4
    
    1. 读取.csv 文件。
      • 您的文件没有任何列名,因此我们传递header=None
      • 使用空格作为分隔符:sep=" "
    2. 反转数组,最后一行将是第一行。
    3. 更改列顺序。
    4. 将您的数据导出到另一个.csv 文件。
      • 指定分隔符:sep=" "
      • 我们不需要任何特殊的行索引或标题:header=None, index=None

    【讨论】:

      猜你喜欢
      • 2015-12-07
      • 2018-12-08
      • 1970-01-01
      • 2016-10-04
      • 2016-01-16
      • 1970-01-01
      • 2017-04-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多