#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. Спасибо всем, я смог продвинуться вперед и заставил это работать.