【问题标题】:Run over the row's of a csv data (in Python)运行 csv 数据的行(在 Python 中)
【发布时间】:2020-04-18 15:31:19
【问题描述】:

我正在读取一个包含十列的 csv - 文件。

我的公式应该将第一个向量除以第二个向量。第一个向量由前五个值(即 exe 数据的前五列)组成,第二个向量由后五个值(即 exe 数据的最后五列)组成。 现在我想用公式对每一行进行计算。这意味着,我想计算第一行、第二行、第三行等等......并带有一个输出(一个向量)。 以第一行为例:

left = data_one.values[0,0:5]
right = data_one.values[0,5:10]
def symmetryRatio():
     result_one = left/right 
     print("The result is: " +str(result_one))

这是我的示例 csv - 包含五行的数据(但我也可以拥有包含 100 行或更多行的数据):

1.00,0.80,0.40,0.20,0.50,1.20,0.90,0.30,0.20,0.34

1.10,0.85,0.50,0.21,0.59,1.30,0.95,0.40,0.21,0.42

0.90,0.90,0.45,0.23,0.50,1.10,1.00,0.35,0.23,0.35

1.05,0.70,0.40,0.28,0.57,1.25,0.80,0.30,0.28,0.38

0.95,0.75,0.45,0.30,0.60,1.15,0.85,0.35,0.30,0.42

我已经开始使用一种新方法,它应该在每一行上运行:

data_one=pd.read_csv("file:///C:/Users/...../healthyValues.csv")
def rowPass():
    for line in data_one:
       print(line)
    return 0

现在我不知道该怎么走。

我希望我想做什么很清楚。

最终应该有(我认为是)两种方法。一个用公式进行计算(symmetryRatio()),一个在行上运行(rowPass())。

谢谢你帮助我。

编辑:

现在我计算了所有列的平均值。然后我将这些值放入两个向量中。之后,我再次使用了这两个向量的公式。

one = data_one.iloc[:,0].mean()
two = data_one.iloc[:,1].mean()
three = data_one.iloc[:,2].mean()
four = data_one.iloc[:,3].mean()
five = data_one.iloc[:,4].mean()
six = data_one.iloc[:,5].mean()
seven = data_one.iloc[:,6].mean()
eight = data_one.iloc[:,7].mean()
nine = data_one.iloc[:,8].mean()
ten = data_one.iloc[:,9].mean()
#first vector:
 vek1=np.array([one1,two1,three1,four1,five1])
#second vector
 vek2=np.array([six1,seven1,eight1,nine1,ten1])
def symmetryRatio():
   res=vek1/vek2
   print(res)

也就是说,我有两种情况:

  1. 计算所有行(参见 GiovaniSalazar 的正确答案)
  2. Mean-Average-Value-Calculation over all colomns --> 一个向量中的前五个值和一个向量中的后五个值(参见我的代码)

是否有机会以一种方法或两种方法更好地完成这两项工作?怎么做?

【问题讨论】:

  • 你能添加你期望的输出吗?
  • 是的,当然。对不起。我的输出应该显示行上的所有结果。所以首先是公式的第一行的结果,然后是第二行的结果,依此类推......你知道我的意思吗?
  • 好的,但是你的csv中有......例如5行......并且symbolicRatio得到2行作为输入......它对每一行重复?......我的意思是对称比率 (row1,row2) 对称比率 (row3,row4), 对称比率 (row5,row6)....等等?
  • 或者只是第一行和第二行?
  • 并像文本一样添加示例 csv(我需要复制)而不是图像

标签: python list csv for-loop row


【解决方案1】:

尝试使用类似这样的 ..with pandas (pip install pandas) 和 numpy (pip install numpy):

import pandas as pd
from io import StringIO
import numpy as np

data = """
1.00,0.80,0.40,0.20,0.50,1.20,0.90,0.30,0.20,0.34
1.10,0.85,0.50,0.21,0.59,1.30,0.95,0.40,0.21,0.42
0.90,0.90,0.45,0.23,0.50,1.10,1.00,0.35,0.23,0.35
1.05,0.70,0.40,0.28,0.57,1.25,0.80,0.30,0.28,0.38
0.95,0.75,0.45,0.30,0.60,1.15,0.85,0.35,0.30,0.42
"""
df = pd.read_csv(StringIO(data), sep=',',header=None)
df1=df.to_numpy()

for line in df1:
  result_one = line[[0,1,2,3,4]]/line[[5,6,7,8,9]]
  print("The result is: " +str(result_one))

结果:

The result is: [0.83333333 0.88888889 1.33333333 1.         1.47058824]
The result is: [0.84615385 0.89473684 1.25       1.         1.4047619 ]
The result is: [0.81818182 0.9        1.28571429 1.         1.42857143]
The result is: [0.84       0.875      1.33333333 1.         1.5       ]
The result is: [0.82608696 0.88235294 1.28571429 1.         1.42857143]

【讨论】:

  • 太棒了@mathflower!
  • 您能否查看我在顶部问题中的新编辑?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-07-02
  • 2021-10-23
  • 2013-06-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多