如何在python3.11中循环通过csv文件数值数据

imzjd6km  于 2023-04-27  发布在  Python
关注(0)|答案(3)|浏览(178)

我有一个csv文件,其中有一列数值(很多行),我想循环csv文件中的行作为数值,以便进一步处理。例如,假设我想找到最小值和最大值。
编辑:为清楚起见,添加了特定用例,我的csv文件是0.12秒复合视频的示波器电压读数(600万个点或csv行)。我将需要确定何时开始一个新的场,并从该点开始处理数据,因为我想将单个场逐个像素地重新创建到图像文件中。稍后,我将“清理”复合信号,然后我将创建一个新的场。我用这个作为非实时测试。
我能够加载我的csv文件并使用下面的示例代码打印数据,但它似乎是一个字符串而不是数字数据行。

import csv
with open('ExampleFile.csv', newline='') as f:
    reader = csv.reader(f)
    for row in reader:
        print(row)

csv文件中的几行数据:1.65 1.71 1.49 1.33 1.06 0.703 0.301 0.261 0.442 0.622 0.723 0.683 0.843 1.2 1.63 1.71 1.49 1.31 1.04 0.663

zyfwsgd6

zyfwsgd61#

如果它只有一列,就不是真正的CSV文件......无论哪种方式,csv模块都不会为您解析数字(这是一件好事-看看Excel如何处理您的数据,如果它感觉像这样......)。
下面是一个扩展代码的示例,它将第零列解析为一个数字,并跟踪最小值和最大值(而不必一次将所有文件读入内存)。

import csv
min_value = None
max_value = None
with open('ExampleFile.csv', newline='') as f:
    for row in csv.reader(f):
        value = float(row[0])  # interpret column as a floating point number
        if min_value is None or value < min_value:
            min_value = value
        if max_value is None or value > max_value:
            max_value = value

print(f"{min_value=}, {max_value=}")

如果文件很小,你不介意将其全部读入内存,并对数据进行两次遍历以获得最小值和最大值,那么使用列表解析来循环文件会变得更简单:

import csv

with open('ExampleFile.csv', newline='') as f:
    # Interpret zeroth column of all rows as a float,
    # store them in a list
    values = [float(row[0]) for row in csv.reader(f)]

min_value = min(values)
max_value = max(values)

print(f"{min_value=}, {max_value=}")
tcomlyy6

tcomlyy62#

您可以使用Pandas来处理csv文件并推断列数据类型,特别是如果您想要应用一些数据处理:

import pandas as pd

df = pd.read_csv('ExampleFile.csv')

输出:

>>> df
  Car   Color  Value
0   A     red     10
1   B    blue     30
2   C  yellow     40

>>> df.dtypes
Car      object
Color    object
Value     int64  # <- detected as numeric
dtype: object
vnjpjtjt

vnjpjtjt3#

假设您实际上只有一列数据。

cat single_col.csv
1
2
3
4
5

import csv

with open('single_col.csv', newline='') as csv_file:
    c_reader = csv.reader(csv_file, delimiter=' ')
    for row in c_reader:
        print(float(row[0]))
1.0
2.0
3.0
4.0
5.0

相关问题