【问题标题】:Python: How can I access CSV like a matrix?Python:如何像矩阵一样访问 CSV?
【发布时间】:2013-08-03 11:04:12
【问题描述】:

我不想手动执行解析 CSV 的部分,我需要以这种方式访问​​单元格:

Cells (row, column) = X

X = Cells (row, column)

有人知道怎么做吗?

【问题讨论】:

    标签: python csv python-module


    【解决方案1】:

    假设您有一个 CSV 文件并希望将其视为一个数组:

    您可以使用 numpy 模块中的 genfromtxt,这将创建一个 numpy 数组,其中包含与您的文件中一样多的行和列(X 在下面的代码中)。假设数据都是数字,您可以使用savetxt 将值存储在 csv 文件中:

    import numpy as np
    X = np.genfromtxt("yourcsvfile.dat",delimiter=",")
    X[0,0] = 42   # do something with the array
    np.savetxt('yourcsvfile.dat',X,delimiter=",")
    

    编辑:

    如果文件中有字符串,你可以这样做:

    # read in
    X = np.genfromtxt("yourcsvfile.dat",delimiter=",",dtype=None)
    # write out
    with open('yourcsvfile.dat','w') as f:
    for el in X[()]:
        f.write(str(el)+' ') 
    

    这里的答案中的一些其他技术:

    numpy save an array of different types to a text file

    How do I import data with different types from file into a Python Numpy array?

    【讨论】:

    • 我的 CSV 中有一些字符串和一些时间/日期,它们会被修剪吗?谢谢
    • 处理数据类型、缺失数据、按列号而不是名称索引...这只是应该被接受的答案的部分原因。 Pandas(正如@kleino 所建议的)是一个更好的选择。
    【解决方案2】:

    numpy 很好,但对于这么简单的要求来说有点过头了。

    试试:

    import csv
    sheet = list(csv.reader(open(source_csv_location)))
    print sheet[0][0]
    

    【讨论】:

      【解决方案3】:

      根据您需要的复杂程度,pandas 可能会很好。

      import pandas as pd
      location = r'C:\path\to\your\file.csv'
      df = pd.read_csv(location, names=['Names','Births'])
      
      df['Births'].plot()
      

      【讨论】:

      • 这应该是公认的答案。 Pandas 非常方便地包装了 numpy,因此确实没有必要使用低级的 numpy 方法。
      猜你喜欢
      • 1970-01-01
      • 2021-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-26
      • 2021-12-30
      • 2013-04-30
      • 2021-09-08
      相关资源
      最近更新 更多