在Python中从包含多个数据类型的文本文件创建数组

在Python中从包含多个数据类型的文本文件创建数组,python,arrays,csv,pandas,numpy,Python,Arrays,Csv,Pandas,Numpy,我试图从包含数字和字母(作为标题)的文本文件创建数组,但是,当我尝试转换并打开文件时,我最终得到错误: ValueError:浮点()的文本无效:0 或 ValueError:无法将字符串转换为浮点值:AA 我知道这是一个数据类型问题,我想知道是否有人知道解决这个问题的方法?我是python新手,通常使用Matlab编写代码。我的文本文件包括: AA, AB, AC, AD, AE, AF, AG, AH, AI 0, 1, 0, 1, 1, 0, 1, 0, 0 我试过的代码如下 impor

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

ValueError:浮点()的文本无效:0

ValueError:无法将字符串转换为浮点值:AA

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

AA, AB, AC, AD, AE, AF, AG, AH, AI
0, 1, 0, 1, 1, 0, 1, 0, 0
我试过的代码如下

import numpy as np
a = np.loadtxt('test.txt')
print 
之后,我需要剪切所有有0的列,并保留其中有1的列。每次加载的文本文件都会不同,我只需要查看哪些单元格和标题中填充了1。

允许使用数据类型参数,类似这样的内容将读取混合数据:

import numpy as np
a = np.loadtxt('test.txt', dtype=object)
我应该如何解决这个问题? 现在,我们已经回答了如何使
numpy.readtxt()
读取我的文件的问题,让我们来看看如何解决分析文件中的0和1的问题。在文件中读取以下代码段,然后查找哪些列包含任意列和所有列

1:使用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:使用熊猫

['AB', 'AD', 'AE', 'AG']
['AB', 'AE']
也可以用来做这项工作。更多的学习曲线比上述,但你得到你付出的

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和熊猫的结果

['AB', 'AD', 'AE', 'AG']
['AB', 'AE']
文件1:

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

假设您的文件名为
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
):

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


你的档案里到底有什么?数字、字母的交替行。或者只有一行字母和下一行数字。如果要混合文本和数字,迫使您使用
dtype=object
,那么您可能不需要numpy数组,而是需要一个常规的Python列表。它是一行字母和一行数字。谢谢@juanpa.arrivillaga!将其放入python列表的格式是否类似?在MATLAB中加载时会得到什么?是字母行列标题还是数据?一旦加载了这些数据,您需要如何处理?我们真的想在新的python编码器上使用对象数据类型数组吗?@hpaulj,您有一点,我通常不会提供
numpy.readtxt()
作为他的问题的解决方案,除非他问了一个关于键入的特定问题,并且已经拿起了
numpy
刀。所以我给他看了尖头在哪里。我愿意用numpy以外的东西!如果是这样的话,你能做的最好的事情就是得到更具体的答案,然后回答上面的@hpaulj问题:一旦加载了数据,你需要对这些数据做什么?一旦加载了数据,我需要剪切所有有0的列,并保留其中有1的列。要加载的文本文件每次都会不同,我只需要查看哪些单元格和标题中填充了1,
for entry in list_entries:
    print entry.replace('\n', '')