从CSV文件添加值

时间:2019-01-12 20:12:39

标签: python

我开始学习python,并在语法方面苦苦挣扎。

我有一个看起来像这样的简单CSV文件

0.01,10,20,0.35,40,50,60,70,80,90,100
2,22,32,42,52,62,72,82,92,102,112
3,33,43,53,63,5647,83,93,103,113,123

我想在csv文件中的所有数据中寻找最高和最低值,除了每行的第一个值。

所以有效的答案是

highestValue=5647
lowestValue=0.35

因为查看的数据如下(它忽略了每一行的第一个值)

10,20,0.35,40,50,60,70,80,90,100
22,32,42,52,62,72,82,92,102,112
33,43,53,63,73,5647,93,103,113,123

我希望我的代码能在任何行长下工作。

我真的不得不承认我在努力,但这就是我尝试过的方法。我通常对PHP进行编程,因此这对我来说是全新的。我从事这项简单的任务已经有一天了,无法理解。我认为我对术语“列表”感到困惑。

import numpy

test_data_file = open ("Anaconda3JamesData/james_test_3.csv","r")
test_data_list = test_data_file.readlines()
test_data_file.close()

for record in test_data_list:
    all_values = record.split(',')
    maxvalue = np.max(numpy.asfarray(all_values[1:])

print (maxvalue)

使用测试数据(该问题顶部显示的CSV文件),我希望答案是

highestValue=5647
lowestValue=0.35

5 个答案:

答案 0 :(得分:1)

如果您使用的是numpy,则可以使用numpy.ndarraynumpy.genfromtxt()的形式读取csv文件,然后使用数组的.max().min()方法

import numpy
array = numpy.genfromtxt('Anaconda3JamesData/james_test_3.csv', delimiter=',')
array[:, 1:].max()
array[:, 1:].min()

[:, 1:]部分正在使用numpy's array indexing。就是说要全部行(第一个[:,部分),每行都需要除第一列(1:]部分)之外的所有内容。这不适用于Python的内置列表。

答案 1 :(得分:0)

每次循环都覆盖maxvalue,因此您只是从最后一行而不是整个文件中获取最大值。您需要与之前的最大值进行比较。

maxvalue = None
for record in test_data_list:
    all_values = record.split(',')
    if maxvalue is None:
        maxvalue = np.max(numpy.asfarray(all_values[1:])
    else:
        maxvalue = max(maxvalue, np.max(numpy.asfarray(all_values[1:]))

答案 2 :(得分:0)

对于此问题,您不需要numpy的功能。一个简单的CSV阅读器就足够了:

ax11 = df6.plot(kind="scatter", x="Measured Values",y="Predicted Values", 
              color="b", label="Measured Values")
df10.plot(x="xx100", y="yy100", ls="--", c=".3" , 
         color ='red', label = "y=x", ax=ax11)   
df10.plot(x="xx100", y="yy111", ls="--", c=".3" , 
         color ='black', label = "y=x+1", ax=ax11)
df10.plot(x="xx100", y="yy91", ls="--", c=".3" , 
         color ='gray', label = "y=x-1", ax=ax11)
ax11.set_xlabel("Measured Values")
ax11.set_ylabel("Predicted Values")
ax11.set_xlim([0,0.4])
ax11.set_ylim([0,0.4])
ax11.set_title("WBM Solid Content")

答案 3 :(得分:0)

我认为此任务不需要使用function clickEvent(event) { event.preventDefault(); // do your thing here // remove the onclick event trigger and continue with the event event.target.parentElement.onclick = null; event.target.parentElement.click(); } 。首先,这是

numpy

可以简化为:

test_data_file = open ("Anaconda3JamesData/james_test_3.csv","r")
test_data_list = test_data_file.readlines()
test_data_file.close()

for record in test_data_list:

我们可以使用列表理解来读取所有值:

with open("Anaconda3JamesData/james_test_3.csv","r") as test_data_file:
    for record in test_data_file:

with open("Anaconda3JamesData/james_test_3.csv","r") as test_data_file: values = [float(val) for line in test_data_file for val in line.split(",")[1:]] 现在包含所有相关数字,因此我们可以这样做:

values

答案 4 :(得分:0)

这是一个pandas解决方案,可以提供所需的结果:

import pandas as pd
df = pd.read_csv('test1.csv', header=None)
# df:
#    0     1   2      3   4     5   6   7    8    9    10
# 0  0.01  10  20   0.35  40    50  60  70   80   90  100
# 1  2.00  22  32  42.00  52    62  72  82   92  102  112
# 2  3.00  33  43  53.00  63  5647  83  93  103  113  123

df = df.iloc[:, 1:] 
print("Highest value: {}".format(df.values.max()))
print("Lowest value: {}".format(df.values.min()))
#Output:
Highest value: 5647.0
Lowest value: 0.35