Python 试图获取.csv文件列中的最大数字
这就是我目前的情况,我得到的错误是int是'int'对象不可编辑。如果我理解正确,我的问题是BIKE_AVAILABLE在我的项目顶部被分配了一个带有数字的数字,因此它不是查看列,而是查看该数字并出错。我该如何浏览这篇专栏文章呢?我为这个生疏的问题提前道歉Python 试图获取.csv文件列中的最大数字,python,csv,Python,Csv,这就是我目前的情况,我得到的错误是int是'int'对象不可编辑。如果我理解正确,我的问题是BIKE_AVAILABLE在我的项目顶部被分配了一个带有数字的数字,因此它不是查看列,而是查看该数字并出错。我该如何浏览这篇专栏文章呢?我为这个生疏的问题提前道歉 for i in range(len(stations[BIKES_AVAILABLE]) -1): most_bikes = max(stations[BIKES_AVAILABLE]) sort(stations[BIKES_AV
for i in range(len(stations[BIKES_AVAILABLE]) -1):
most_bikes = max(stations[BIKES_AVAILABLE])
sort(stations[BIKES_AVAILABLE]).remove(max(stations[BIKES_AVAILABLE]))
if most_bikes == max(stations[BIKES_AVAILABLE]):
second_most = max(stations[BIKES_AVAILABLE])
index_1 = index(most_bikes)
index_2 = index(second_most)
most_bikes = max(data[0][index_1], data[0][index_2])
return most_bikes
假设csv结构如下:
data = ['1,blue,15,True',
'2,red,25,False',
'3,orange,35,False',
'4,yellow,24,True',
'5,green,12,True']
如果我想从第3列获得最大值,我会这样做:
largest_number = max([n.split(',')[2] for n in data])
import pandas as pd
data = pd.read_csv('bicycle_data.csv')
# Alternative:
# most_sales = data['sold'].max()
most_sales = max(data['sold'])
另一种更好地用于数据操作的方法是尝试
pandas
模块
然后你可以这样做:
largest_number = max([n.split(',')[2] for n in data])
import pandas as pd
data = pd.read_csv('bicycle_data.csv')
# Alternative:
# most_sales = data['sold'].max()
most_sales = max(data['sold'])
现在,您不必担心用数字索引列:
您也可以这样做:
sorted_data = data.sort_values(by='sold', ascending=False)
# Displays top 5 sold bicycles.
print(sorted_data.head(5))
更重要的是,如果您喜欢使用索引,那么有一个函数可以使用生成器在max()中获取max
值的索引,该值被称为内置pandas
如果您有一个名为test.CSV
的CSV
文件,其内容如下:
line1,3,abc
line2,1,ahc
line3,9,sbc
line4,4,agc
您可以在max()
函数
中使用生成器
表达式
来实现内存
高效解决方案(即不创建列表
)
如果要对第二列执行此操作,则:
max(int(l.split(',')[1]) for l in open("test.csv").readlines())
这将为本例提供9
更新
要获取行
(索引
),您需要在列
中存储最大
编号的索引
,以便访问:
max(((i,int(l.split(',')[1])) for i,l in enumerate(open("test.csv").readlines())),key=lambda t:t[1])[0]
它在这里给出了2
,因为test.csv
中的行和列中的max
号(即9
)是2
(即第三行)
这很好,但您可能更喜欢将其稍微分解:
lines = open("test.csv").readlines()
max(((i,int(l.split(',')[1])) for i,l in enumerate(lines)),key=lambda t:t[1])[0]
站点的数据结构是什么?丹尼尔,欢迎来到SO!您的代码示例不完整,因此无法运行它并重现您的问题。看一看。使用熊猫数据框。熊猫可以直接将csv文件读取到数据帧中。数据帧允许最小值/最大值等。另外,您确定要对范围内的i(len(站点[BIKES\u可用])-1使用而不是对范围内的i(len(站点[BIKES\u可用])使用)
?例如,范围(3)
中i的将使用0
、1
、2
-而不是3
的值在i中循环。。。它上升到,但不包括编号的值。这使得for i in range(len(somelist))
成为更常见的模式。非常感谢,如果我想找到这个数字的索引,我可以做这个索引吗?max=[BIKES\u AVAILABLE]。index(max(int(int(l.split(','))[BIKES\u AVAILABLE])for l in open in(“stations.csv”)。readlines()@DanielLynes No,不像我假设的那样,BIKES\u可用
作为列
(?),因此您将尝试在一个整数
上执行。索引
,这根本不起作用。我已经更新了我的答案,告诉我如何正确地获得行
。请记住接受
和向上投票
,如果这对您也适用的话!