#python #numpy #for-loop #split #readline
#python #numpy #for-цикл #разделить #readline
Вопрос:
Hii у меня есть текстовый файл, содержащий данные, подобные приведенным ниже, и сохраненный в имени input.file
2.0_39_RAS.out 1.911157 1.5 80 0 10
2.8_29_BAS.out 2.224520 1.5 78 0 60
2.0_29_CGD.out 2.198376 1.5 85 0 28
2.0_28_MPK.out 1.945320 1.5 78 0 36
2.1_30_CLR.out 2.281479 1.5 78 0 16
Я просто хочу выполнить некоторые вычисления, используя значения столбцов, и хочу записать его вывод в последнем столбце следующим образом:
для вывода: мне нужно умножить 4th
6th
столбец на значение столбца и разделить его на второе число (39,29,29,28,30) из строки .out, присутствующей в первом столбце
output
2.0_39_RAS.out 1.911157 1.5 80 0 10 (80*10)/39
2.8_29_BAS.out 2.224520 1.5 78 0 60 (78*60)/29
2.0_29_CGD.out 2.198376 1.5 85 0 28 (85*28)/29
2.0_28_MPK.out 1.945320 1.5 78 0 36 (78*36)/28
2.1_30_CLR.out 2.281479 1.5 78 0 16 (78*16)/30
я попытался написать скрипт для этого
import numpy as np
import glob
import os
import sys
from pathlib import Path
dir1 = glob.glob('/home/drem/data/input.file')
for files in dir1:
x=files
a = open(x,'r')
b = a.readlines()
a.close()
for line in b:
columns=line.split()
print(columns)
col4=columns[3]
print(col4)
Однако он не получает доступ к значениям столбцов и не выполняет вычисления … я надеюсь, что какой-нибудь эксперт мне поможет.Заранее спасибо.
Комментарии:
1. Я рекомендую использовать
pandas
для такого рода табличных данных.2. не могли бы вы помочь, как это сделать
Ответ №1:
Вы можете использовать pandas для таких вычислений на основе таблиц / столбцов, но вам следует прочитать документы и выполнить несколько руководств, чтобы понять каждую строку:
Основная идея состоит в том, чтобы загрузить набор данных с помощью анализатора CSV и превратить его в pandas.DataFrame
место, где вы можете манипулировать данными по столбцам.
import pandas as pd
df = pd.read_csv(
"input.file",
delim_whitespace=True,
names=["A", "B", "C", "D", "E", "F"],
index_col=False)
df["result"] = df["D"] * df["F"] / df["A"].apply(lambda x: int(x.split("_")[1]))
print(df)
Дает вам:
A B C D E F result
0 2.0_39_RAS.out 1.911157 1.5 80 0 10 20.512821
1 2.8_29_BAS.out 2.224520 1.5 78 0 60 161.379310
2 2.0_29_CGD.out 2.198376 1.5 85 0 28 82.068966
3 2.0_28_MPK.out 1.945320 1.5 78 0 36 100.285714
4 2.1_30_CLR.out 2.281479 1.5 78 0 16 41.600000
Дополнительная информация доступна здесь: https://pandas.pydata.org
Комментарии:
1. однако я не использую dexes, такие как A B C D E F, а также 0 1 2 3 4
2. Я не понимаю, что вы имеете в виду. Пример делает именно то, что вы просили. Вы можете называть столбцы так, как вам нравится.
3. заголовки индексов, которые мне нужно удалить
4. Затем удалите их.
5. как вы можете предложить