1

如何将文本文件的第一行转换为python中的列表?我想在转换为列表时转义 NaN。

import csv
with open ('data.txt', 'r') as f:
    first_row = [column[0] for column in csv.reader(f,delimiter='\t')]
    print (first_row)
4

4 回答 4

4

让自己更轻松,使用pandas

import pandas
df  = pandas.read_csv("data.txt")

如果您需要明确告诉 pandas 某个特定值是NaN,只需将其传递给阅读器

df = pandas.read_csv("data.txt", na_values=["NAN"])

或者如果您想跳过有问题的行

df = pandas.read_csv("data.txt", error_bad_lines=False)

要获得第 1 行:

row1 = df.irow(0)

要获得第 1 列:

col1 = df.icol(0)
于 2013-06-12T02:34:41.027 回答
1

csv.reader()返回一个迭代器,每次迭代产生一个列数组(即行)。

简单地说,这足以让您将data.txt的第一行作为列表:

import csv
with open ('data.txt') as f:
    first_row = csv.reader(f, delimiter='\t')

看来您还想将列表元素转换为十进制类型,这可以使用map(...)and来完成float(...)

例如:

first_row = map(float, first_row)

如果列表包含文本“NaN”,float()则将其转换为特殊值nan而无需太多干预。

例如:

>>> float("NaN")
nan
于 2013-06-12T04:47:35.007 回答
1

如果您有确定的方法来确定单元格的无效值是什么,您可以使用字符串比较并忽略这些值。

如果您的目的是忽略那些 Python 不认为是浮点数的值,您可以执行以下操作:

cell = <cell_value>
try:
    f = float(cell)
    # store f somewhere
except ValueError:
    # ignore cell, or may be log this
    pass
于 2013-06-12T02:36:27.880 回答
0

这对我有用(将一行或一行上的所有单元格放入列表中):

import csv
with open ('data.txt', 'r') as f:
    for row in csv.reader(f,delimiter='\t'):
        print row # prints a list of entries for current row.
于 2013-06-12T02:45:18.017 回答