Ошибка памяти в python для цикла

#python #out-of-memory

#python #не хватает памяти

Вопрос:

У меня есть столбец для продолжительности, где время определяется в «мин», «сек» и «сезон» для фильмов.я пытаюсь привести все значения продолжительности в минутах. приведенная ниже функция, похоже, работает, но получает ошибку памяти. пожалуйста, помогите.

     import pandas as pd

    Netflix_df=pd.read_csv(r"C:UsersmrauthanOneDrive - ascenaretail.comDesktopAscenaDSPythonPracticeNetflixnetflix_titles.csv")

    Netflix_split=Netflix_df['duration'].str.split(" ",0,expand=True)
    print(Netflix_split[0])

    for x in Netflix_split[1]:
    #if Netflix_split[1]=='hours':
    if x  in 'hours':
        Netflix_split[0]=Netflix_split[0]*60
    elif x in 'Seasons':
        Netflix_split[0]=Netflix_split[0]*60*24
    else:
        Netflix_split[0]=Netflix_split[0]*60*24*24
  

Вывод:

 runfile('C:/Users/mrauthan/OneDrive - ascenaretail.com/Desktop/Ascena/DS/Python Practice/Netflix/Test.py', wdir='C:/Users/mrauthan/OneDrive - ascenaretail.com/Desktop/Ascena/DS/Python Practice/Netflix')
0       90
1       94
2        1
3        1
4       99
        ..
6229    13
6230     4
6231    60
6232     2
6233    10
Name: 0, Length: 6234, dtype: object
Traceback (most recent call last):

  File "<ipython-input-3-860d9eb41224>", line 1, in <module>
    runfile('C:/Users/mrauthan/OneDrive - ascenaretail.com/Desktop/Ascena/DS/Python Practice/Netflix/Test.py', wdir='C:/Users/mrauthan/OneDrive - ascenaretail.com/Desktop/Ascena/DS/Python Practice/Netflix')

  File "C:ProgramDataAnaconda3libsite-packagesspyder_kernelscustomizespydercustomize.py", line 827, in runfile
    execfile(filename, namespace)

  File "C:ProgramDataAnaconda3libsite-packagesspyder_kernelscustomizespydercustomize.py", line 110, in execfile
    exec(compile(f.read(), filename, 'exec'), namespace)

  File "C:/Users/mrauthan/OneDrive - ascenaretail.com/Desktop/Ascena/DS/Python Practice/Netflix/Test.py", line 17, in <module>
    Netflix_split[0]=Netflix_split[0]*60*24*24

  File "C:ProgramDataAnaconda3libsite-packagespandascoreops__init__.py", line 1048, in wrapper
    result = na_op(lvalues, rvalues)

  File "C:ProgramDataAnaconda3libsite-packagespandascoreops__init__.py", line 968, in na_op
    result = expressions.evaluate(op, str_rep, x, y, **eval_kwargs)

  File "C:ProgramDataAnaconda3libsite-packagespandascorecomputationexpressions.py", line 221, in evaluate
    return _evaluate(op, op_str, a, b, **eval_kwargs)

  File "C:ProgramDataAnaconda3libsite-packagespandascorecomputationexpressions.py", line 127, in _evaluate_numexpr
    result = _evaluate_standard(op, op_str, a, b)

  File "C:ProgramDataAnaconda3libsite-packagespandascorecomputationexpressions.py", line 70, in _evaluate_standard
    return op(a, b)

MemoryError
  

Комментарии:

1. Я вижу, что вы уже делаете print(Netflix_split[0]) , что и должно было быть моим предложением. Является ли значение там тем, что вы ожидаете?

2. ДА… на самом деле значение столбцов равно 2 минутам, 2 часам, 2 сезонам. Netflix_split[0] показывает значение как числовое, а Netflix_split [1] показывает значение как минуты, часы,season…so я пытаюсь свести его к одному параметру, например mins, с некоторыми вычислениями для дальнейшего анализа….

3. for x in Netflix_split[1]: выглядит подозрительно. Вам не нужно повторять следующие вычисления более одного раза, поскольку они векторизованы. Попробуйте запустить свой код через отладчик или добавить print(Netflix_split[0]) внутри этого цикла, и я думаю, вы увидите, что числа становятся намного больше, чем должны.

4. Спасибо, эта проблема решена после удаления цикла for .. я новичок в python, поэтому смог получить проблему, возникшую из-за цикла for и векторизованную.. Можете ли вы помочь, как я могу извлекать каждую строку и обновлять ее, используя условие if… я получаю эту ошибку после удаления loop…it извлекает всю строку из условия if, которое кажется TypeError: ‘in <string>’ требует строку в качестве левого операнда, а не ряд

5. Спасибо всем, я смог продвинуться вперед и заставил это работать.