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('-'))