#python #text-files #data-analysis
#python #текстовые файлы #анализ данных
Вопрос:
У меня есть текстовый файл txt, который содержит 6 столбцов: 1. пол (М / Ж) 2.возраст 3. рост 4. вес 5.-/ 6.zip код
Мне нужно найти из этого текста, сколько мужчин имеют знак. (например: из текстового текста 30 M (мужчины) — )
Поэтому мне нужно только число в конце.
Логически мне нужно работать со столбцами 1 и 5, но я изо всех сил пытаюсь получить только одно (суммарное) число в конце.
Это содержимое текста:
M 87 66 133 - 33634
M 17 77 119 - 33625
M 63 57 230 - 33603
F 55 50 249 - 33646
M 45 51 204 - 33675
M 58 49 145 - 33629
F 84 70 215 - 33606
M 50 69 184 - 33647
M 83 60 178 - 33611
M 42 66 262 - 33682
M 33 75 176 33634
M 27 48 132 - 33607
Сейчас я получаю результат …, но я хочу, чтобы и M, и положительный. Как я могу добавить это к вхождениям??
f=open('corona.txt','r')
data=f.read()
occurrences=data.count('M')
print('Number of Males that have been tested positive:',occurrences)
Комментарии:
1. Что вы пробовали? Покажите свой существующий код и то, что работает не так, как ожидалось
2. поделитесь кодом и несколькими строками текстового файла
3. Я попробовал это с помощью csv и enumerate, но мне нужно сделать это с помощью простого синтаксиса.
4. пожалуйста, поделитесь своим кодом, чтобы увидеть, что вы пробовали…
5. пожалуйста, скопируйте ваш код и вставьте его сюда, нам легче помочь вам
Ответ №1:
Вы можете разделить строки следующим образом:
occurrences = 0
with open('corona.txt') as f:
for line in f:
cells = line.split()
if cells[0] == "M" and cells[4] == "-":
occurrences = 1
print("Occurrences of M-:", occurrences)
Но лучше использовать csv
модуль или pandas
для такого рода работ.
Комментарии:
1. Да, это то, что я искал. Большое спасибо! Ценю это 🙂
Ответ №2:
Если вы выполняете какой-либо значительный объем работы с текстовыми и столбчатыми данными, я бы посоветовал начать обучение pandas
Для этой задачи, если ваш csv содержит одну запись в строке и разделен пробелом:
import pandas as pd
d = pd.read_csv('data.txt',
names=['Sex', 'Age', 'Height', 'Weight', 'Sign', 'ZIP'],
sep=' ', index_col=False)
d[(d.Sex=='M') amp; (d.Sign=='-')].shape[0] # or
len(d[(d.Sex=='M') amp; (d.Sign=='-')]) # same result, in this case = 9
Pandas
это очень обширный пакет. Что делает этот код, так это создает a DataFrame
из ваших данных csv, присваивая каждому столбцу имя. Затем выбирает из этого каждую строку, в которой находятся оба ваших условия Sex == 'M'
и Sign == '-'
, и сообщает о количестве найденных таким образом записей.
Я рекомендую начать здесь
Комментарии:
1. Большое вам спасибо! Но я не должен использовать другие библиотеки, я должен получить результат, используя простые базовые синтаксические: например, open() read и, возможно, используя цикл.
2. Извините, я неправильно понял «простой синтаксис» как «Consise Syntax», а не «без использования дополнительных пакетов». Можете ли вы обновить свой OP с помощью кода, который вы уже пробовали, используя открытые встроенные модули, и результатов, которые вы получили?
3. Есть ли какой-либо возможный способ получить тот же результат, но определить его таким образом: file=open(‘mf.txt ‘,’r’) для строки в файле: print(строка) file.close()