从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,我将删除列的方式改为更“熊猫”的方式。