Python For Loop не выполняет итерацию всего Dataframe - PullRequest
0 голосов
/ 09 февраля 2019

Я пытаюсь перебрать весь DataFrame Python Pandas, но, похоже, он не перебирает весь DataFrame.Это работает для DataFrames более коротких длин, но не этот.Кроме того, я работаю в Jupyter Notebook.

Я добавил несколько операторов печати для отладки.

def dropNotIn(df):

    print(df.shape)

    removedlist = []
    droplist = []

    for i, x in df.iterrows():
        rownum = i

    print(rownum)
    print(len(df))

Результаты для dropNotIn (df):

(59610, 9)
3449 --> Expected to be 59610
59610

Вот мой df.head ():

    date    attendance  venue_city  venue_state venue_name  away_team   home_team   away_points home_points
9   2015-12-13  1740.0  Chicago IL  McGrath-Phillips Arena  Arkansas-Little Rock    DePaul  66  44
13  2015-11-22  0.0 St. Thomas  NaN Virgin Islands Sport & Fitness Center   Tulsa   Indiana State   67  59
14  2014-12-04  3469.0  St. Bonaventure NY  Reilly Center   Buffalo St. Bonaventure 63  72
21  2015-11-20  1522.0  St. Thomas  NaN Virgin Islands Sport & Fitness Center   Hofstra Florida State   82  77
24  2014-11-23  NaN St. Thomas  NaN Virgin Islands Sport & Fitness Center   Gardner-Webb    Seton Hall  67  85

Ответы [ 2 ]

0 голосов
/ 09 февраля 2019

В пандах DataFrame.iterrows() возвращает индекс и строку.Индекс - это то, что вы контролируете, и, глядя на ваши примеры данных, у вас нет индекса с плотно упакованными целыми числами, но есть что-то еще.

Попробуйте вместо этого этот код:

def dropNotIn(df):

    print(df.shape)

    removedlist = []
    droplist = []

    num_rows = 0
    for i, x in df.iterrows():
        num_rows += 1

    print(num_rows)
    print(len(df))

Это считает строки явно, вместо того, чтобы пытаться использовать индекс.Если вы действительно хотите считать строки во время ваших операций, я бы предложил использовать встроенную функцию enumerate для этого:

for num, (index, row) in enumerate(df.iterrows()):
   pass

Однако я подозреваю, что вы, вероятно, не хотите этого делать, потому что когдавы делаете вещи с фреймом данных, вы хотите максимально их векторизовать.

0 голосов
/ 09 февраля 2019

iterrow перебирает индекс, который не равен rownum.У вас могут быть несколько индексов с более чем одной строкой.

Попробуйте распаковать x,y = df.shape() и выполнить итерацию по range(x)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...