从CSV文件PYTHON读取列块

从CSV文件PYTHON读取列块,python,list,csv,Python,List,Csv,对于文件结构: A B C D 1 x y z 2 x y z 3 x y z 4 x y z 5 i j k 6 i j k 7 .......etc. 我想跳过标题,然后是每行的第一个元素 真正有趣的数据是x,y,z,i,j,k值 这些值是ADC值,需要排列到列表列表中 my_list = [0] [x,x,x,x] [1] [y,y,y,y]

对于文件结构:

A   B    C    D
1   x    y    z
2   x    y    z
3   x    y    z
4   x    y    z
5   i    j    k
6   i    j    k
7   .......etc.
我想跳过标题,然后是每行的第一个元素

真正有趣的数据是x,y,z,i,j,k值

这些值是ADC值,需要排列到列表列表中

my_list = [0] [x,x,x,x]
          [1] [y,y,y,y]
          [2] [z,z,z,z]
          [3] [i,i,i,i] etc.
我可以很容易地迭代出完整的列,但棘手的部分是迭代出每列的某些行

到目前为止,我试过:

def readin(myfile):

import csv
with open(myfile, 'r') as f:  # Open Results File

    next(f) # skip headings

    data = csv.reader(f, delimiter="\t")
    temp = []
    temp2=[]
    my_list=[]

    for i in range(13): #my_list will be 12 lists long
       print i
       for x in range(1,4):
        for row in data:
         temp.append(row[x])
    return my_list

我刚刚迭代了一列。我不知道如何轻松地对列进行切片(对于单独的x、I等)。

转换数据并切片:

 from itertools import izip
 data = csv.reader(f, delimiter="\t")
 trans = izip(*data)
 A = next(trans) # skip first col

这是代码,正如您所看到的,我使用熊猫来操作数据

import pandas as pd

df = pd.read_csv("te.txt")
df.drop(df.columns[[0]], axis=1, inplace=True) # delete the first column as you wished
li = []
for col in df.columns:
    li.append(list(df[col]))
print li
输出:

[['x', 'x', 'x', 'x', 'i', 'i'],
 ['y', 'y', 'y', 'y', 'j', 'j'],
 ['z', 'z', 'z', 'z', 'k', 'k']]
[['x', 'x', 'x', 'x'], 
 ['y', 'y', 'y', 'y'],
 ['z', 'z', 'z', 'z']]
这是csv文件“te.txt”:


一种没有外部模块但
csv
的方法:

import csv

with open('blocks.csv') as infile:
    reader = csv.reader(infile)
    out_list = []

    # skip first line
    next(reader)

    while True:
        block = []
        try:
            # read four lines
            for i in range(4):
                block.append(next(reader))
        except StopIteration:
            break

        # transpose the block and skip the index column
        transposed_block = zip(*block)[1:]
        out_list += transposed_block
这将产生以下
输出列表

>>> out_list
[('x', 'x', 'x', 'x'),
 ('y', 'y', 'y', 'y'),
 ('z', 'z', 'z', 'z'),
 ('i', 'i', 'i', 'i'),
 ('j', 'j', 'j', 'j'),
 ('k', 'k', 'k', 'k')]
使用熊猫如下:

from pandas import DataFrame as df

d = df.read_csv("text.txt")

d.drop(d.columns[[0]], axis=1, inplace=True)
k_list = [d.loc[:3,k].tolist() for k in d.columns()]

print k_list
输出:

[['x', 'x', 'x', 'x', 'i', 'i'],
 ['y', 'y', 'y', 'y', 'j', 'j'],
 ['z', 'z', 'z', 'z', 'k', 'k']]
[['x', 'x', 'x', 'x'], 
 ['y', 'y', 'y', 'y'],
 ['z', 'z', 'z', 'z']]

以下内容将为您提供所需的结果。它使用了一种稍有不同的方法一次读取四行,并删除了第一列:

import csv

def readin(myfile):
    my_list = []

    with open(myfile, 'r') as f:        # Open Results File
        csv_input = csv.reader(f, delimiter=" ", skipinitialspace=True)
        headings = next(csv_input)      # Skip headings

        try:
            while True:
                my_list.extend(zip(next(csv_input), next(csv_input), next(csv_input), next(csv_input))[1:])
        except StopIteration:
            pass

    return my_list

result = readin("results_file.csv")

print result[0]
print result
输出为:

('x', 'x', 'x', 'x')

[('x', 'x', 'x', 'x'), ('y', 'y', 'y', 'y'), ('z', 'z', 'z', 'z'), ('i', 'i', 'i', 'i'), ('j', 'j', 'j', 'j'), ('k', 'k', 'k', 'k')]

您的预期输出是什么?@omri_saadon“我的列表”(修改后的帖子)@omri_saadon…忽略文件中的1-7等,所以元素[1:3]每行都很好,但如何忽略转置数据中的第一行?@cc6g11,使用itertools.zip,调用izip对象上的next跳过第一个colQuick问题,如何使用del函数删除?我不理解您传递的参数。@cc6g11,我将删除列的方式改为更“熊猫”的方式。