【问题标题】:Merging multiple CSV files by column按列合并多个 CSV 文件
【发布时间】:2017-09-10 08:14:06
【问题描述】:

我将如何将多个 CSV 文件逐列合并为一个。我记录的是从网页上抓取的公司的图表位置。只有第一个文件有两列,位置 1 到 100,第二列包含公司名称。所有其他文件只有一列;仅包含公司名称。现在我想按如下所述合并这些。首选 Mac/Linux 解决方案。我可以写 Bash,一点 JavaScript,但 Perl 不是我的强项。

1.csv:

position,name
1,microsoft
2,apple
3,google

以及以日期命名的其他各种文件,如下所示:

2.csv:

name
microsoft
apple
google

3.csv:

name
apple
microsoft
google

合并后的版本如下所示:

position,name,name,name
1,microsoft,microsoft,apple
2,apple,apple,microsoft
3,google,google,google

我能找到的唯一解决方案是一个接一个地添加(或连接)内容,这不是我想要的。

【问题讨论】:

标签: csv


【解决方案1】:

您还没有真正指明您希望使用哪种语言工作。但是如果您想使用 python,您可以下载 pandas 并将您的 csv 加载到 pandas 表中。然后,您可以使用表连接来实现您的要求:)

https://pandas.pydata.org/pandas-docs/stable/merging.html

【讨论】:

    【解决方案2】:

    这是使用jq 的解决方案。如果filter.jq 包含以下过滤器:

    def parse:
      reduce ( inputs
             | {f:input_filename, r:split(",")}
             | select(.r|length>0)
      ) as $i (
        {}
      ; .[$i.f] += [$i.r]
      )
    ;
    
    def reorg:
        range([ map_values(length)[] ] | max) as $r
      | [ .[] | .[$r] // [range(.[0]|length)|""] | .[] ]
    ;
    
    parse | reorg | join(",")
    

    文件1.csv2.csv3.csv 包含样本数据,然后是命令

    $ jq -Rrn -f filter.jq 1.csv 2.csv 3.csv
    

    生产

    position,name,name,name
    1,microsoft,microsoft,apple
    2,apple,apple,microsoft
    3,google,google,google
    

    【讨论】:

      猜你喜欢
      • 2021-12-07
      • 1970-01-01
      • 2013-07-19
      • 1970-01-01
      • 1970-01-01
      • 2012-11-16
      • 2019-10-11
      • 2019-07-13
      相关资源
      最近更新 更多