如何在Python中创建基于列表的二维数组

2024-06-28 10:53:30 发布

您现在位置:Python中文网/ 问答频道 /正文

我的任务是比较两个CSV文件,找出它们之间的区别。可以计算每列的平均值。现在,我正在尝试读取CSV文件,将数据转换为float,并创建一个基于二维列表的数组,用于将来的列平均值计算。我被困住了。 我有两个类似这样的CSV文件,它们是相同的,但标题不同:

Extraction  DATA                
Start = 01-01-01 08:00:00.000  End = 01-01-01 08:01:00.000  Period =  6.00E+0                   

Request     Request     Name1     Name2       Name3      Name4        
Date        Time        Descr1    Desc2       Descr3     Descr3     
yy-mm-dd    hh:mm:ss.sss mm       mm         mm           mm 

2001/01/24  00:00.0 1.00E+03    1.00E+03    -1.00E-04   8.00E-04
2001/01/25  00:01.0 2.00E+03    2.00E+03    -2.00E-04   9.00E-04
2001/01/26  00:02.0 3.00E+03    3.00E+03    -3.00E-04   1.00E-03
2001/01/27  00:03.0 4.00E+03    4.00E+03    -4.00E-04   1.10E-03
2001/01/28  00:04.0 5.00E+03    5.00E+03    -5.00E-04   1.20E-03
2001/01/29  00:05.0 6.00E+03    6.00E+03    -6.00E-04   1.30E-03
2001/01/30  00:06.0 7.00E+03    7.00E+03    -7.00E-04   1.40E-03
2001/01/31  00:07.0 8.00E+03    8.00E+03    -8.00E-04   1.50E-03
2001/02/01  00:08.0 9.00E+03    9.00E+03    -9.00E-04   1.60E-03
2001/02/02  00:09.0 1.00E+04    1.00E+04    -1.00E-03   1.70E-03
2001/02/03  00:10.0 1.10E+04    1.10E+04    -1.10E-03   1.80E-03

我写了这个代码:

import csv

skip = 0
my_list = []

#trying to convert to float
def conv(s):
    try:
        s=float(s)
    except ValueError:
        pass    
    return s

with open('Illia1.csv', newline='') as data:    
    reader = csv.reader(data, delimiter=",")
    #Skip 8 rows with headers
    while skip < 8:
        next(reader, None)
        skip += 1
    #Reading rows and writing converted cells into the list
    for row in reader:
        for cell in row:
            y=conv(cell)
            my_list.append(y)
        print(my_list)

我将输出数据转换为float类型,但是如何将每一行的转换结果存储到一个单独的列表中。因为现在我有一个结果:

['2001/01/25', '00:01.0', 2000.0, 2000.0, -0.0002, 0.0009, '2001/01/26', '00:02.0', 3000.0, 3000.0, -0.0003, 0.001, '2001/01/27', '00:03.0', 4000.0, 4000.0, -0.0004, 0.0011, '2001/01/28', '00:04.0', 5000.0, 5000.0, -0.0005, 0.0012, '2001/01/29', '00:05.0', 6000.0, 6000.0, -0.0006, 0.0013, '2001/01/30', '00:06.0', 7000.0, 7000.0, -0.0007, 0.0014, '2001/01/31', '00:07.0', 8000.0, 8000.0, -0.0008, 0.0015, '2001/02/01', '00:08.0', 9000.0, 9000.0, -0.0009, 0.0016, '2001/02/02', '00:09.0', 10000.0, 10000.0, -0.001, 0.0017, '2001/02/03', '00:10.0', 11000.0, 11000.0, -0.0011, 0.0018]

谢谢你的关注。我期待着你的答复


Tags: 文件csvto数据列表requestmyfloat
1条回答
网友
1楼 · 发布于 2024-06-28 10:53:30

您可以使my_list成为一个列表列表,其中每个sub_list对应于一行数据。例如

for row in reader:
    sub_list = []
    for cell in row:
        y = conv(cell)
        sub_list.append(y)
    my_list.append(sub_list)
print(my_list)

这将产生[[row 1 data], [row 2 data],...]。然后您可以通过for sub_list in my_list轻松地将列表分开

相关问题 更多 >