Python 试图获取.csv文件列中的最大数字

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

这就是我目前的情况,我得到的错误是int是'int'对象不可编辑。如果我理解正确,我的问题是BIKE_AVAILABLE在我的项目顶部被分配了一个带有数字的数字,因此它不是查看列,而是查看该数字并出错。我该如何浏览这篇专栏文章呢?我为这个生疏的问题提前道歉

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可用
作为
(?),因此您将尝试在一个
整数
上执行
。索引
,这根本不起作用。我已经更新了我的答案,告诉我如何正确地获得
。请记住
接受
向上投票
,如果这对您也适用的话!