Я скачал ваш набор данных, и есть несколько способов сделать это.Прежде всего, вам не нужно вводить свои данные, если вы этого не хотите.Ваша проблема может быть решена следующим образом:
import pandas as pd
df = pd.read_csv('states_all.csv')
df.fillna(0, inplace=True) # fill NA with 0, not required but nice looking
print(len(df.loc[df['GRADES_9_12_G'] < 5000])) # 184
print(len(df.loc[(df['GRADES_9_12_G'] > 10000) & (df['GRADES_9_12_G'] < 20000)])) # 52
Строка df.loc[df['GRADES_9_12_G'] < 5000]
сообщает пандам запросить фрейм данных для всех строк в столбце df['GRADES_9_12_G']
, которые меньше 5000. Затем я вызываю встроенную программу pythonфункция, возвращающая длину возвращаемого значения, которая выводит 184. По сути, это логический процесс маскирования, который возвращает все True
значения для вашего df, которые удовлетворяют заданным вами условиям.
Второй запрос df.loc[(df['GRADES_9_12_G'] > 10000) & (df['GRADES_9_12_G'] < 20000)]
использует оператор &
, который является побитовым оператором, который требует выполнения обоих условий для возврата строки.Затем мы также вызываем функцию len для получения целочисленного значения числа строк, которое выдает 52.
Чтобы отключить ваш метод:
import pandas as pd
df = pd.read_csv('states_all.csv')
df.fillna(0, inplace=True) # fill NA with 0, not required but nice looking
df = df.iloc[:, -6] # select all rows for your column -6
print(len(df[df < 5000])) # query your "df" for all values less than 5k and print len
print(len(df[(df > 10000) & (df < 20000)])) # same as above, just for vals in between range
ПочемуЯ изменяю код в моем ответе вместо того, чтобы использовать ваш?
Достаточно просто сказать, что это более пандонично.Там, где мы можем, удобнее использовать встроенные функции панд, чем перебирать кадры данных с циклами for, поскольку для этого и была разработана pandas.