Поиск минимальных и максимальных значений в шаблоне списка в Python

#python #function

#python #функция

Вопрос:

У меня есть файл csv и шаблон данных, подобный этому:

введите описание изображения здесь

Я импортирую его из файла csv. Во входных данных есть несколько пробелов, и я обрабатываю их с помощью шаблона, как указано выше. Для вывода я хочу написать функцию, которая принимает этот файл в качестве входных данных и выводит самое низкое и самое высокое кровяное давление. Кроме того, он вернет среднее значение всех средних значений. С другой стороны, я не должен использовать pandas.

Я написал ниже code blog.

 bloods=open(bloodfilename).read().split("n")
blood_pressure=bloods[4].split(",")[1]
pattern=r"s*(d )s*[s*(d )-(d )s*]"
re.findall(pattern,blood_pressure)

#now extract mean, min and max information from the blood_pressure of each patinet and write a new file called blood_pressure_modified.csv
pattern=r"s*(d )s*[s*(d )-(d )s*]"
outputfilename="blood_pressure_modified.csv"
# create a writeable file
outputfile=open(outputfilename,"w")

for blood in bloods:
    patient_id, blood_pressure=bloods.strip.split(",")
    mean=re.findall(pattern,blood_pressure)[0]
    blood_pressure_modified=re.sub(pattern,"",blood_pressure)
    print(patient_id, blood_pressure_modified, mean, sep=",", file=outputfile)
    
outputfile.close()
 

Вывод должен выглядеть следующим образом:

введите описание изображения здесь

введите описание изображения здесь

Комментарии:

1. Здесь небольшая путаница, так какой именно результат вы хотите получить здесь? Можете ли вы просто поделиться в приведенном выше описании образцом выходных данных для каждой из пяти строк, которые вы указали в качестве образца ввода?

2. Я отредактировал вопрос. Но, на самом деле, 5 строк ниже являются входными данными. Я импортирую его из файла csv. Во входных данных есть несколько пробелов, и я обрабатываю их с помощью шаблона, как указано выше. Для вывода я хочу написать функцию, которая принимает этот файл в качестве входных данных и выводит самое низкое и самое высокое кровяное давление. Кроме того, он вернет среднее значение всех средних значений.

3. Итак, у меня есть очень простое решение. Не уверен, что я освещаю здесь все ваши мелкие проблемы. Даже не используя регулярное выражение. Дайте мне знать, если это сработает. Отправка его в качестве ответа.

Ответ №1:

Это очень простой ответ на этот вопрос. Нет регулярных выражений, панд или чего-либо еще. Дайте мне знать, работает ли это. Я могу попытаться улучшить его работу в любом случае, если он не работает.

 bloods=open("bloodfilename.csv").read().split("n")

means = []

'''
Also, rather than having two list of mins and maxs, 
we can have just one and taking min and max from this 
list later would do the same trick. But just for clarity I kept both.
'''
mins = []
maxs = []
for val in bloods[1:]:     #assuming first line is header of the csv
    mean, ranges = val.split(',')[1].split('[')
    
    means.append(int(mean.strip()))
    
    first, second = ranges.split(']')[0].split('-')
    mins.append(int(first.strip()))
    maxs.append(int(second.strip()))
    
print(f'the lowest and the highest blood pressure are: {min(mins)} {max(maxs)} respectivelynaverage of mean values is {sum(means)/len(means)}')
 

Вы также можете создавать функции для выполнения небольших небольших полос. Обычно это лучший способ кодирования. Я написал это в спешке, так что не возражайте.

Комментарии:

1. Спасибо за ваш ответ! Я получил сообщение об ошибке. Потому что между некоторыми символами в некоторых строках есть пробелы. Если я смогу удалить эти пробелы, ваш код будет запущен.

2. Это тоже можно обработать. Если вы хотите, вы можете указать случай ошибки в приведенном выше примере ввода, и я могу изменить код, чтобы справиться с этим. Устраивай себя @ds_ds. В остальном хорошего дня. Эй, кстати, можете ли вы принять этот ответ? И спасибо за поддержку, кстати.

3. Кстати, причина ошибки связана с другой проблемой. Я справился с этим. Спасибо! Ваш ответ работает!

Ответ №2:

Возможно, это могло бы помочь с вашим вопросом,
предположим, у вас есть CSV-файл, подобный этому, и вы хотите извлечь только минимальные и максимальные значения,

 SN  Number
1   135[113-166]
2   140[110-155]
3   132[108-180]
4   40[130-178]
5   133[118-160]
 

Затем,

 import pandas as pd

df = pd.read_csv("REPLACE_WITH_YOUR_FILE_NAME.csv")
results = df['YOUR_NUMBER_COLUMN'].apply(lambda x: x.split("[")[1].strip("]").split("-"))


with open("results.csv", mode="w") as f:
    f.write("MIN,"   "MAX")
    f.write("n")
    for i in results:
        f.write(str(i[0])   ","   str(i[1]))
        f.write("n")
    f.close()
 

После того, как вы запустили фрагмент после без каких-либо ошибок, в вашем текущем рабочем каталоге должен быть файл с именем results.csv Откройте его, и вы получите результаты