Python 从CSV文件添加值
我开始学习python,并且正在努力学习语法 我有一个简单的CSV文件,看起来像这样Python 从CSV文件添加值,python,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 因为查看的数据如下(它忽略了每
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
因为查看的数据如下(它忽略了每行的第一个值)
我希望我的代码适用于任何行长度
我真的不得不承认我在挣扎,但以下是我尝试过的。我通常编写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
在循环中,每次都覆盖
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:]))
如果您使用的是numpy,则可以将csv文件作为using读取,然后使用数组的和方法
[:,1:][/code>部件正在使用。它的意思是取所有的行(第一个[:,
部分),对于每一行,取除第一列以外的所有行(第一个1::
部分)。这不适用于Python的内置列表 这个问题不需要numpy的强大功能。一个简单的CSV阅读器就足够了:
with open("Anaconda3JamesData/james_test_3.csv") as infile:
r = csv.reader(infile)
rows = [list(map(float, line))[1:] for line in r]
max(map(max, rows))
# 5647.0
min(map(min, rows))
# 0.35
我认为这个任务不需要使用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:]]
值
现在包含所有相关数字,因此我们只需执行以下操作:
highest_value = max(values)
lowest_value = min(values)
这里有一个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
你应该用它来阅读csv。@Boris的确如此,但对于这样一个简单的问题,它是不必要的。
highest_value = max(values)
lowest_value = min(values)
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