python - 在 Python 中读取 scipy/numpy 中的 csv 文件

标签 python csv numpy matplotlib scipy

我在 python 中读取由制表符分隔的 csv 文件时遇到问题。我使用以下功能:

def csv2array(filename, skiprows=0, delimiter='\t', raw_header=False, missing=None, with_header=True):
    """
    Parse a file name into an array. Return the array and additional header lines. By default,
    parse the header lines into dictionaries, assuming the parameters are numeric,
    using 'parse_header'.
    """
    f = open(filename, 'r')
    skipped_rows = []
    for n in range(skiprows):
        header_line = f.readline().strip()
        if raw_header:
            skipped_rows.append(header_line)
        else:
            skipped_rows.append(parse_header(header_line))
    f.close()
    if missing:
        data = genfromtxt(filename, dtype=None, names=with_header,
                          deletechars='', skiprows=skiprows, missing=missing)
    else:
    if delimiter != '\t':
        data = genfromtxt(filename, dtype=None, names=with_header, delimiter=delimiter,
                  deletechars='', skiprows=skiprows)
    else:
        data = genfromtxt(filename, dtype=None, names=with_header,
                  deletechars='', skiprows=skiprows)        
    if data.ndim == 0:
    data = array([data.item()])
    return (data, skipped_rows)

问题是 genfromtxt 提示我的文件,例如错误:

Line #27100 (got 12 columns instead of 16)

我不确定这些错误从何而来。有任何想法吗?

这是导致问题的示例文件:

#Gene   120-1   120-3   120-4   30-1    30-3    30-4    C-1 C-2 C-5 genesymbol  genedesc
ENSMUSG00000000001  7.32    9.5 7.76    7.24    11.35   8.83    6.67    11.35   7.12    Gnai3   guanine nucleotide binding protein alpha
ENSMUSG00000000003  0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 Pbsn    probasin

有没有更好的方法来编写通用的 csv2array 函数?谢谢。

最佳答案

检查 python CSV 模块:http://docs.python.org/library/csv.html

import csv
reader = csv.reader(open("myfile.csv", "rb"), 
                    delimiter='\t', quoting=csv.QUOTE_NONE)

header = []
records = []
fields = 16

if thereIsAHeader: header = reader.next()

for row, record in enumerate(reader):
    if len(record) != fields:
        print "Skipping malformed record %i, contains %i fields (%i expected)" %
            (record, len(record), fields)
    else:
        records.append(record)

# do numpy stuff.

关于python - 在 Python 中读取 scipy/numpy 中的 csv 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2859404/

相关文章:

python - 将方法 python 替换为多个值

python - 使用 sklearn IterativeImputer 时,出现 ValueError : Input contains NaN, 无穷大或值对于 dtype ('float64' 来说太大

python - 将动态c lib.so集成到python

python - 用于时间序列预测的 LSTM 自动编码器

python - 在两个 python 环境中使用 pyinstaller

python - 从类实例python中删除属性

node.js - 如何在 Node js中读取csv文件

mysql - 如何上传文件(csv 或文本)并在 Zope 框架中读取内容

bash - 使用 csvtool 调用在 bash 中过滤 csv

python - Tensorflow 为张量创建 Protobuf