在python中跨多个列表查找列的最小值

Posted

技术标签:

【中文标题】在python中跨多个列表查找列的最小值【英文标题】:Finding the min of a column across multiple lists in python 【发布时间】:2021-07-02 01:11:19 【问题描述】:

我需要从 csv 文件中找到给定列的最小值和最大值,目前该值是一个字符串,但我需要它是一个整数,现在我将所有行拆分为列表后的输出看起来像这样

['FRA', 'Europe', 'France', '14/06/2020', '390', '10\n']
['FRA', 'Europe', 'France', '11/06/2020', '364', '27\n']
['FRA', 'Europe', 'France', '12/06/2020', '802', '28\n']
['FRA', 'Europe', 'France', '13/06/2020', '497', '24\n']

从那条线以及其他许多条线中,我想找到 第 5 列,目前我这样做的时候

min(column[4]) 

它只是给出每个单独列表的最小值,即该列中的数字,而不是将它们全部分组并获得最小值。

P.S:我对 python 和编码很陌生,我也必须在不导入任何模块的情况下这样做。

为你阿兹罗。

def main(csvfile,country,analysis):
infile = csvfile
datafile = open(infile, "r")
country = country.capitalize()     
if analysis == "statistics":
    for line in datafile.readlines():
        column = line.split(",")
        if column[2] == country:

【问题讨论】:

您正在使用单词列。我们是在谈论我们的列表中的数据框吗? 你能分享读取数据和构建列表的代码吗? 我在想我需要把它转换成整数 【参考方案1】:

您可以使用pandas,它允许读取csv文件并将它们操作为DataFrame,然后很容易从列中检索min/max

import pandas as pd

df = pd.read_csv("test.txt", sep=',')

mini = df['colName'].min()
maxi = df['colName'].max()
print(mini, maxi)

然后,如果您已经在列表列表中读取数据,则最多使用内置 minmax

# use rstrip() when reading line, to remove leading \n
values = [
    ['FRA', 'Europe', 'France', '14/06/2020', '390', '10'],
    ['FRA', 'Europe', 'France', '14/06/2020', '395', '10']
]

mini = min(values, key=lambda x: int(x[4]))[4]
maxi = max(values, key=lambda x: int(x[4]))[4]

【讨论】:

【参考方案2】:

看看pandas 库,尤其是DataFrame 类。这可能是处理 .csv 文件和一般表格数据的首选方法。

基本上,您的代码应该是这样的:

import pandas as pd
df = pd.read_csv('my_file.csv') # Construct a DataFrame from a csv file
print(df.columns) # check to see which column names the dataframe has
print(df['My Column'].min())
print(df['My Column'].max())

【讨论】:

【参考方案3】:

有更短的方法可以做到这一点。但是这个例子是一步一步来的:

# After you read a CSV file, you'll have a bunch of rows.
rows = [
    ['A', '390', '...'],
    ['B', '750', '...'],
    ['C', '207', '...'],
]

# Grab a column that you want.
col = [row[1] for row in rows]

# Convert strings to integers.
vals = [int(s) for s in col]

# Print max.
print(max(vals))

【讨论】:

以上是关于在python中跨多个列表查找列的最小值的主要内容,如果未能解决你的问题,请参考以下文章

Python - 如何在列表中查找不是最小值的数字

在列表列表中查找最小值[重复]

查找列表中的最小元素(递归) - Python

在列表中查找具有值的最小字典键的 Pythonic 方法?

在 Vba 列的范围内查找最小值和最大值

查找具有唯一列的数组中每一行的最小值