【问题标题】:Writing different rows of csv into columns keeping the same header? - Python将不同的csv行写入保持相同标题的列中? - Python
【发布时间】:2019-02-14 22:15:08
【问题描述】:

使用 CSV 格式的文件

   Name  X    Y    L   W 
   alpha 100  200  50  20
   beta  200  250  30  40
   ...

我们如何将 CSV 转换为格式

  Name  X     Y   L   W   Name  X    Y    L   W  
  alpha 100  200  50  20  beta  200  250  30  40

最大行数(不包括标题)为 4。任何人都可以指导如何为这种情况构建动态字典并使用 python 压缩以获取上述格式的结果吗?

【问题讨论】:

  • 你希望第三个数据行去哪里?
  • 你尝试什么?
  • @blhsing 也与前两行位于同一行。 (第二行看起来像 - 1strowdata、2ndrowdata、3rd rowdata、4th rowdata),如问题所述,csv 的数据在 1 到 4 行之间变化(不包括标题)。

标签: python csv dictionary dynamic zip


【解决方案1】:

如果数据不大,则简单直接的脚本。

import csv
rd = csv.reader(open("input.csv"), delimiter=' ', quoting=csv.QUOTE_MINIMAL, skipinitialspace=True)
header = rd.next()
wr = csv.writer(open("output.csv", "w"), delimiter=' ')
data_lines = 0 
data = []
for line in rd:
    data += line
    data_lines += 1
wr.writerow(header*data_lines)
wr.writerow(data)

skipinitialspace=True 是删除分隔符中的多余空格(考虑到输入 csv 是 ' ' 分隔的)。

【讨论】:

    【解决方案2】:

    你可以使用熊猫:

    import pandas as pd
    
    # read file
    df = pd.read_csv('file.csv')
    
    # split by row and concatenate along columns
    res = pd.concat([df.iloc[[i]].reset_index(drop=True) \
                     for i in range(len(df.index))], axis=1)
    
    # export to csv
    res.to_csv('out.csv', index=False)
    

    2 行的结果:

        Name    X    Y   L   W  Name    X    Y   L   W
    0  alpha  100  200  50  20  beta  200  250  30  40
    

    【讨论】:

    • 我得到的当前结果是, Name X Y L W , Name X Y L W 0, alpha 100 200 50 20, beta 200 250 30 40 有逗号。
    • @BearBrown,确切地说,这与您问题中所需的输出相同。 CSV 文件通常有逗号 [因此逗号分隔值],使用 sep 参数作为 pd.DataFrame.to_csv 的其他选项。
    • 我只是自己尝试,我不是OP
    • @BearBrown,啊,我明白了,上面的评论应该仍然适用:)。
    猜你喜欢
    • 2017-12-04
    • 2021-11-29
    • 2018-05-15
    • 2018-05-27
    • 1970-01-01
    • 2014-09-22
    • 2014-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多