iteritems () в столбце данных - PullRequest
1 голос
/ 11 апреля 2019

У меня есть набор данных образовательных данных США: проект объединения. Я хочу узнать

  1. Количество строк, в которых количество учащихся в 9-12 классах (столбец: GRADES_9_12_G) меньше 5000
  2. Число строк, в которых зачисление производится в 9-12 классах (столбец: GRADES_9_12_G), составляет от 10000 до 20000.

У меня проблема с обновлением счетчика, если значение в операторе if верно.

import pandas as pd 
import numpy as np

df = pd.read_csv("C:/Users/akash/Downloads/states_all.csv")
df.shape

df = df.iloc[:, -6] 

for key, value in df.iteritems():
    count = 0
    count1 = 0
    if value < 5000:
        count += 1
    elif value < 20000 and value > 10000:
        count1 += 1

print(str(count) + str(count1))

df выглядит так

0        196386.0

1         30847.0

2        175210.0

3        123113.0

4       1372011.0

5        160299.0

6        126917.0

7         28338.0

8         18173.0

9        511557.0

10       315539.0

11        43882.0

12        66541.0

13       495562.0

14       278161.0

15       138907.0

16       120960.0

17       181786.0

18       196891.0

19        59289.0

20       189795.0

21       230299.0

22       419351.0

23       224426.0

24       129554.0

25       235437.0

26        44449.0

27        79975.0

28        57605.0

29        47999.0

          ...    

1462          NaN

1463          NaN

1464          NaN

1465          NaN

1466          NaN

1467          NaN

1468          NaN

1469          NaN

1470          NaN

1471          NaN

1472          NaN

1473          NaN

1474          NaN

1475          NaN

1476          NaN

1477          NaN

1478          NaN

1479          NaN

1480          NaN

1481          NaN

1482          NaN

1483          NaN

1484          NaN

1485          NaN

1486          NaN

1487          NaN

1488          NaN

1489          NaN

1490          NaN

1491          NaN

Name: GRADES_9_12_G, Length: 1492, dtype: float64

На выходе я получил

00

Ответы [ 2 ]

1 голос
/ 12 апреля 2019

С Пандами использование петель - почти всегда неправильный путь. Вы, вероятно, хотите что-то вроде этого:

print(len(df.loc[df['GRADES_9_12_G'] < 5000]))    
print(len(df.loc[(10000 < df['GRADES_9_12_G']) & (df['GRADES_9_12_G'] < 20000)]))
0 голосов
/ 12 апреля 2019

Я скачал ваш набор данных, и есть несколько способов сделать это.Прежде всего, вам не нужно вводить свои данные, если вы этого не хотите.Ваша проблема может быть решена следующим образом:

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.

...