【问题标题】:Whats the best way of putting tabular data into python?将表格数据放入 python 的最佳方法是什么?
【发布时间】:2010-11-15 00:31:33
【问题描述】:

我有一个 CSV 文件,我正在处理该文件并将处理后的数据放入一个文本文件中。 进入文本文件的整个数据是一个大表(逗号分隔而不是空格)。我的问题是如何记住文本文件中一条数据进入的列?

例如。假设有一个名为“col”的列。 我只是在 col 下放了一些数据。现在经过几次迭代,我想再次将一些其他数据放在 col 下(在不同的行中)。我怎么知道 col 到底来自哪里? (而且有很多这样的专栏。)

希望我不要太含糊...

【问题讨论】:

  • -1:非常模糊。请举个例子。
  • 我只是在col下放了一些数据 “put some data under”是什么意思? 现在经过几次迭代,我想再次将其他一些数据放在 col 下(在不同的行中)。我怎么知道 col 到底是哪里来的?你第一次是怎么知道的?

标签: python file csv


【解决方案1】:

可能是listdictdictlist。就个人而言,我会选择前者。因此,解析 CSV 的标题行以获得从列标题到列索引的dict。然后,当您阅读每一行时,计算出您所在的索引,获取列标题,然后附加到该列标题的列表末尾。

【讨论】:

    【解决方案2】:

    Python 的 CSV 库有一个 function named DictReader,它允许您以 Python 字典的形式查看和操作数据,从而允许您使用普通的迭代工具。

    【讨论】:

      【解决方案3】:

      使用列表列表。那就是:

      [[col1, col2, col3, col4], # Row 1
       [col1, col2, col3, col4], # Row 2
       [col1, col2, col3, col4], # Row 3
       [col1, col2, col3, col4]] # Row 4
      

      要修改特定列,您可以使用单个语句将其转换为列列表:

      >>> cols = zip(*rows)
      >>> cols
      [[row1, row2, row3, row4], # Col 1
       [row1, row2, row3, row4], # Col 2
       [row1, row2, row3, row4], # Col 3
       [row1, row2, row3, row4]] # Col 4
      

      【讨论】:

        【解决方案4】:

        SQLite 适合您吗?我知道您有 CSV 输入和输出。但是,您可以将所有数据导入 SQLite 数据库。然后使用 SQL 的强大功能进行所有必要的处理。然后您可以将结果导出为 CSV。

        【讨论】:

          【解决方案5】:

          好问题,我经常遇到这个问题。

          一般来说,要处理这样的 csv 文件,我更喜欢使用 R,它是专门为此设计的 data.frame 对象。

          在python中,你可以看看这个名为datamatrix的库:

          或者也许在 numpy/scipy 的矩阵中。

          命名元组是另一种用于解析 csv 文件的替代方法,但它们不是基于矩阵的概念:

          【讨论】:

            【解决方案6】:

            您的情况有点模糊,但我会尝试回答您的问题,“我如何记住文本文件中一条数据进入的列?”

            一种方法是将行列表存储为字典。

            注意:我通常使用制表符分隔的文本文件,如果我忘记了有关 csv 格式的内容,请原谅我。

            input_file = open('input.csv', 'r')
            
            # ['col1', 'col2', 'col3']
            headers = input_file.readline().strip().split(',')
            stored_rows = []
            for line in input_file:
                row_data = line.strip().split(',')
                stored_rows.append(dict(zip(headers, row_data)))
            

            现在每一行的每一列都有一个值,然后您可以按您需要的任何顺序处理和输出。

            output_headers = ['col3', 'col1', 'col2']
            output_file = open('ouput.csv', 'w')
            output_file.write(','.join(output_headers) + '\n')
            for row in stored_rows:
                # do any processing you need here
                row['col1'] = row['col1'].strip().lower()  #for example
            
                # write the data to your output file in the order you want it
                output_file.write(','.join(map(row.get, output_headers)) + '\n')
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2011-05-29
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2015-03-08
              • 1970-01-01
              相关资源
              最近更新 更多