Pandas 为什么使用Lambda函数会导致内存错误
我遇到了一个使我的程序崩溃的错误,我不知道如何解决它。错误在这里:Pandas 为什么使用Lambda函数会导致内存错误,pandas,memory,lambda,Pandas,Memory,Lambda,我遇到了一个使我的程序崩溃的错误,我不知道如何解决它。错误在这里: During handling of the above exception, another exception occurred: Traceback (most recent call last): File "C:\Users\Au321103\.spyder-py3\ReadPostgreSQLMOSdata_vortex.py", line 79, in <module> cdata
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\Au321103\.spyder-py3\ReadPostgreSQLMOSdata_vortex.py", line 79, in <module>
cdata[['year','month']] = cdata.Dates.apply(lambda x: pd.Series(x.strftime("%Y,%m").split(",")))
File "C:\Users\Au321103\Anaconda3\envs\Stats\lib\site-packages\pandas\core\series.py", line 3848, in
apply
mapped = lib.map_infer(values, f, convert=convert_dtype)
File "pandas\_libs\lib.pyx", line 2327, in pandas._libs.lib.map_infer
MemoryError
cdata如下所示:
plant_name business_name maint_region_name wind_speed_ms \
0 BII NEE STIPA MEXICO Mexico 9.21
1 BII NEE STIPA MEXICO Mexico 10.12
2 BII NEE STIPA MEXICO Mexico 10.23
3 BII NEE STIPA MEXICO Mexico 10.21
4 BII NEE STIPA MEXICO Mexico 10.13
mos_time power_kwh Dates
0 2021-01-31 01:00:00+00:00 15087.0 2021-01-31
1 2021-01-31 00:00:00+00:00 16658.0 2021-01-31
2 2021-01-30 23:00:00+00:00 18753.3 2021-01-30
3 2021-01-30 22:00:00+00:00 20182.6 2021-01-30
4 2021-01-30 21:00:00+00:00 20172.9 2021-01-30
而且
cdata.columns
Out[3]:
Index(['plant_name', 'business_name', 'maint_region_name', 'wind_speed_ms',
'mos_time', 'power_kwh', 'Dates'],
dtype='object')
我无法理解为什么内存错误会使lambda函数上的程序崩溃,或者如何更改lambda函数的行以消除内存错误。感谢您的帮助,因为我还在学习python。假设cdata.Date是熊猫系列,则lambda函数不应返回系列。参见示例。原因是apply()方法应用于每个元素,您不希望将每一行都变成单独的列(系列)。这可能就是导致内存不足错误的原因 至于您实际想要做什么,您可能应该调用Dataframe.apply()方法,而不是Series.apply()。看
一般来说,请明确您是在系列还是数据帧上操作,并确保您引用的是正确的文档集。以下建议之一可能会有所帮助:
- 尝试使用命名函数代替lambda
- 尝试使用转换而不是应用
- 试用
import numpy as np
data[['year','month', 'day']] = np.vstack(cdata.Dates.astype(str).str.split('-'))
import numpy as np
data[['year','month', 'day']] = np.vstack(cdata.Dates.astype(str).str.split('-'))