从Python中具有多种数据类型的文本文件创建数组

时间:2017-05-12 15:51:46

标签: python arrays csv pandas numpy

我正在尝试使用数字和字母(作为标题)从文本文件创建数组,但是当我尝试转换并打开我的文件时,我最终得到错误:

  

ValueError:float()的文字无效:0

  

ValueError:无法将字符串转换为float:AA

我知道这是一个数据类型的问题,并且想知道是否有人知道解决这个问题的方法?我是python的新手,通常是Matlab中的代码。我的文本文件包含:

<a href="@Url.Action("Action", "Controller", new { id = Model.Id }, "https")">Click Here</a>

我试过的代码在

之下
AA, AB, AC, AD, AE, AF, AG, AH, AI
0, 1, 0, 1, 1, 0, 1, 0, 0

之后,我需要剪切所有具有零的列并保留其中包含1的列。要加载的文本文件每次都会有所不同,我只需要查看哪些单元格和标题已填入1。

2 个答案:

答案 0 :(得分:0)

numpy.loadtxt()允许使用dtype参数,这样的内容将读取混合数据:

import numpy as np
a = np.loadtxt('test.txt', dtype=object)

我该如何解决这个问题?

所以,既然我们已经回答了如何让numpy.readtxt()读取我的文件,那么我们将如何解决分析文件中的0和1的问题。以下代码片段在文件中读取,然后查找哪些列包含任何列和所有列。

1:使用csv模块

csv模块可用于解析此文件。

import csv
with open('file1', 'rU') as csvfile:
    csv_reader = csv.reader(csvfile)

    # read the first line as the header
    header = [c.strip() for c in next(csv_reader)]

    # read the remaining lines, and transpose them into columns using zip()
    cols = list(zip(*((int(c) for c in l) for l in csv_reader)))

# now lets find all the columns which have any and all ones
any_ones = [l for l, v in zip(header, cols) if any(v)]
all_ones = [l for l, v in zip(header, cols) if all(v)]

print(any_ones)
print(all_ones)

2:使用pandas

pandas也可用于完成这项工作。比上面更多的学习曲线,但你得到你付出的代价。

df = pd.read_csv('file1')
# remove spaces from column names
df = df.rename(columns={x: x.strip() for x in df.columns})

any_ix = df.any()
all_ix = df.all()

print(list(any_ix[any_ix].index))
print(list(any_ix[all_ix].index))

csv和pandas的结果

['AB', 'AD', 'AE', 'AG']
['AB', 'AE']

<强> File1中:

AA, AB, AC, AD, AE, AF, AG, AH, AI
0, 1, 0, 1, 1, 0, 0, 0, 0
0, 1, 0, 0, 1, 0, 1, 0, 0

答案 1 :(得分:0)

让我们说你的文件名为file.text,里面有:

AA, AB, AC, AD, AE, AF, AG

0, 1, 0, 1, 1, 0, 1, 0, 0

您可以使用以下方式阅读该文件:

with open('file.txt', 'r') as f:
    read_file = f.read()

从字符串创建列表(即read_file现在是什么):

list_entries = read_file.split(',')

打印列表中的每个条目(替换\n新行字符):

for entry in list_entries:
    print entry.replace('\n', '')