【问题标题】:How to calculate min value of a string from a csv file?如何从 csv 文件中计算字符串的最小值?
【发布时间】:2019-04-09 15:24:48
【问题描述】:

我是 Python 的初学者,我想了解如何计算 csv 文件中的最小值/最大值、平均值、中值。请注意,不使用 csv 模块或任何类型的模块。我只想使用“读取/打开文件”的方法。

所以在放入读取文件的代码后,这就是我写的(我只想读取文件的第二列):

with open("data.csv", "r") as x:
            second = []
            for line in x:
                spl = [float(data.split(',')[1]) for data in x]
                second.append(spl[0:6])
            print(second)

            lowest = min(second)
            print(lowest)

当我执行此操作时,Python 会打印出两个语句(第二列,就像我想要的那样),但会打印出,例如 [x, y, z],而不是实际计算最小值。

当我尝试在 spl = [...] 行中省略 float 部分时,Python 只是执行相同的操作,但改为 ['x','y','z'](带引号)。

【问题讨论】:

  • @Pedro Lobito 抱歉,这是什么意思?
  • 你能分享data.csv的示例行吗?没有清晰的样本,很难为您提供帮助。
  • @coconutjeon: 这是因为你的second 是一个列表列表,尝试连接而不是追加。
  • @Pedro Lobito 该文件仅包含第一行和第一列(即单词)的标题,其余部分包含浮点数。我上面写的代码执行第二列(不包括该列的标题),它是一个数字列表。
  • @Pedro Lobito 列的最小值和最大值。

标签: python python-3.x csv


【解决方案1】:

您只需将单个项目附加到second,如果您只需要第二个项目,则不需要[... for data in x] 围绕您的浮动 ([1])

with open("data.csv", "r") as x:
            second = []
            for line in x:
                spl=float(line.split(',')[1])
                second.append(spl)
            print(second)

            lowest = min(second)
            print(lowest)

输出:

$ ./minVal.py
[124.0, 32.0, 663.0, 3.0, 6234.0, 73.0, 7.0]
3.0

【讨论】:

  • 我试过了,但现在当我希望它只读取数字时,它会读取我的 csv 文件的标题(即单词)。数字从第 2 列第 2 行开始。我的标题在第一行第一列。
  • 然后做一些非常基本的错误处理,在for循环下面添加if line.split(',')[1].isdigit():并缩进spl=float(line.split(',')[1])second.append(spl)
【解决方案2】:

(我需要)一列的最小值、最大值


要在 csv 文件中查找列的 minmax,不使用任何导入,您可以尝试:

with open("stack_csv_max_val.csv", "r") as f:
    s = f.readlines()

ls =  [x for x in [x.strip().split(",") for x in s]]
results = {}
for l in ls:
    ll = [float(x) for x in l]
    for f in range(0, len(ll)):
        if not f in results:
            results[f] = {"min": 1000000, "max": 1}
        if ll[f] > results[f]['max']:
            results[f]['max'] = ll[f]
        elif ll[f] < results[f]['min']:
            results[f]['min'] = ll[f]

print(results)
# print(results[3]) # min/max of column 4

即:file.csv

1,6,8,10
2,19,56,45
3,6,9,11
5,6,9,22

即输出:

{0: {'max': 5.0, 'min': 1},
 1: {'max': 19.0, 'min': 6},
 2: {'max': 56.0, 'min': 8},
 3: {'max': 45.0, 'min': 10}}

注意事项:

  1. 我确信有更简单的方法无需导入,这只是一种方法 这样做。
  2. 上面的代码假定 csv 中的所有数字都是&gt; 0
  3. Demo

【讨论】:

    猜你喜欢
    • 2015-03-16
    • 1970-01-01
    • 2017-03-02
    • 1970-01-01
    • 2023-02-05
    • 2015-08-27
    • 2015-12-03
    • 2020-01-03
    • 2016-08-22
    相关资源
    最近更新 更多