我开始学习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
答案 0 :(得分:1)
如果您使用的是numpy,则可以使用numpy.ndarray
以numpy.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