【问题标题】:Reading a csv file by column按列读取 csv 文件
【发布时间】:2015-06-09 13:49:55
【问题描述】:

我有一个代码可以逐行读取 csv 文件

import csv

with open('example.csv') as csvfile:
    readCSV = csv.reader(csvfile, delimiter=',')
    for row in readCSV:
        print(row)
        print(row[0])

但我只想要选定的列有什么技术可以给我一个脚本吗?

【问题讨论】:

  • 当你说你只想要选定的行时,你的意思是你想完全跳过读取(从磁盘?)你不感兴趣的列,或者你只是想过滤掉你不感兴趣的列不感兴趣?
  • 只想阅读我感兴趣的栏目
  • CSV 数据是固定宽度的吗?我认为这是您要问的唯一方法,即使那样,除非您有许多非常宽(就数据而言)的列,否则它可能没有多大意义。为什么您认为您需要跳过阅读这些专栏?
  • 另外,要求我们“给你一个脚本”是非常粗鲁的; StackOverflow 不是免费的代码编写服务,而是一个“我们帮助你帮助自己”的平台。

标签: python csv multiple-columns


【解决方案1】:
import csv

with open('example.csv') as csvfile:
    readCSV = csv.reader(csvfile, delimiter=',')
    column_one = [row[0] for row in readCSV ]

将为您提供第一列的值列表。话虽如此 - 无论如何您都必须阅读整个文件。

【讨论】:

  • 哇,我佩服你的礼貌。如果有人问我没有试图解决某些问题来“给我一个脚本”,我有点不高兴。投我一票!
  • 好吧,虽然我也更喜欢看到一些尝试 - 我们都从某事开始,有时这只是一个问题,不了解如何完成。参考可以是一个好的开始。 (除了 SO,网上还有很多:D)
【解决方案2】:

您不能这样做,因为文件是逐字节写入文件系统的。要知道一行在哪里结束,您必须阅读所有行以检测是否存在换行符。在 CSV 中无法解决此问题。

因此您必须阅读所有文件 - 但您可以选择要保留每行的哪些部分。

【讨论】:

    【解决方案3】:

    我肯定会为此使用pandas

    但是,在普通 python 中,这是一种方法。

    在本例中,我提取的是第 3 行第 4 列的内容。

    import csv
    
    target_row = 3
    target_col = 4
    
    with open('yourfile.csv', 'rb') as csvfile:
        reader = csv.reader(csvfile)
        n = 0
        for row in reader:
            if row == target_row:
                data = row.split()[target_col]
                break
    
    print data
    

    【讨论】:

      【解决方案4】:

      pandas 模块中的read_csv 可以加载columns 的子集。 假设您只想在 .csv 文件中加载 columns 13

      import pandas as pd
      
      usecols = [1, 3]
      df = pd.read_csv('example.csv',usecols=usecols, sep=',')
      

      这里是 Doc 用于 read_csv。 另外,如果你的文件比较大,可以通过在read_csv中指定chucksize来逐个读取文件

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2012-08-23
        • 2012-08-20
        • 2021-03-11
        • 1970-01-01
        • 2012-06-22
        • 2012-05-23
        相关资源
        最近更新 更多