首页 > 解决方案 > 如何访问列值并使用python进行一些计算

问题描述

您好我有一个文本文件,其中包含如下数据并保存在名称 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)

但是,它不访问列值并且不进行计算......我希望一些专家能帮助我。提前致谢。

标签: pythonnumpyfor-loopsplitreadline

解决方案


您可以将 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


推荐阅读