如何在python转义NaNs中将文本文件的第一行转换为列表?

时间:2013-06-12 02:27:48

标签: python python-3.x

如何在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 个答案:

答案 0 :(得分: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)

答案 1 :(得分:1)

如果您确定如何确定单元格的无效值,您可以使用字符串比较并忽略这些值。

如果您的目的是忽略Python不认为是浮动的那些值 你可以做类似下面的事情:

cell = <cell_value>
try:
    f = float(cell)
    # store f somewhere
except ValueError:
    # ignore cell, or may be log this
    pass

答案 2 :(得分: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.

答案 3 :(得分:0)

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

简而言之,这足以让您将 data.txt 的第一行作为列表:

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

您似乎还希望将列表元素转换为十进制类型,可以使用map(...)float(...)来完成。

e.g:

first_row = map(float, first_row)

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

e.g:

>>> float("NaN")
nan