【问题标题】:Re-structuring data in a csv file重新构建 csv 文件中的数据
【发布时间】:2015-06-02 20:52:24
【问题描述】:

我编写了一个脚本,它从网页收集链接列表,然后从每个链接中抓取一个包含数据的表格,这些都可以正常工作。

我的下一项工作是将表格重组为对我的最终目标更有意义的安排。我什至不确定我想要做什么,所以我会尝试用一个例子来解释。

我使用上述练习创建了 50 个奇怪的文件,如下所示:

            Identifier, Data1, Data2, Data3
            abc,x,x,x
            def,x,x,x
            ghi,x,x,x

我希望每个数据头都与它的值一起成为表格的一部分,如下所示:

            Identifier, Measure, Value
            abc, Data1, x
            def, Data1, x
            ghi, Data1, x               
            abc, Data2, x
            def, Data2, x
            ghi, Data2, x               
            abc, Data3, x
            def, Data3, x
            ghi, Data3, x               
            abc, Data4, x
            def, Data4, x
            ghi, Data4, x               

手动执行此操作非常简单,但在处理 30-50 个文件时可能会有点乏味(而且这是我每隔几个月就必须执行的任务)。我不确定将我的工作表合并在一起会更快(但有些工作表包含额外的标题),单独执行此任务,然后在抓取数据时将它们合并甚至按我想要的方式构建数据。

希望这是有道理的。任何帮助将不胜感激,我很乐意澄清任何事情!谢谢。

【问题讨论】:

  • 你觉得使用 pandas 做这件事怎么样?我认为这将是一个不错的选择
  • 没关系,我刚刚看到你在这个中标记了 pandas
  • 我对库的类型做了一些研究,pandas 似乎是最受欢迎的:)。只是不确定执行此操作的实际过程是什么!
  • 是的,对于这种类型的事情,我喜欢循环通过一个 glob 对象并读取 csvs,然后执行 concat() 以将其放入一帧。然后你可以像下面的答案一样使用 melt()

标签: python python-2.7 csv pandas beautifulsoup


【解决方案1】:

你可以使用pandas.melt:

>>> df
  Identifier  Data1  Data2  Data3
0        abc      1      4      7
1        def      2      5      8
2        ghi      3      6      9

>>> pd.melt(df, id_vars='Identifier', 
...         value_vars=['Data1', 'Data2', 'Data3'], 
...         var_name='Measure', value_name='Value')

  Identifier Measure  Value
0        abc   Data1      1
1        def   Data1      2
2        ghi   Data1      3
3        abc   Data2      4
4        def   Data2      5
5        ghi   Data2      6
6        abc   Data3      7
7        def   Data3      8
8        ghi   Data3      9

【讨论】:

    猜你喜欢
    • 2021-12-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-03
    • 2011-02-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多