Python Pandas分段错误-将列汇总在一起



我正在做一个日常幻想体育项目。

我有一个数据帧,其中包含可能的阵容(6列,阵容中每个球员1列(。

作为我过程的一部分,我为所有玩家生成一个可能的幻想点值。

接下来,我想通过引用梦幻积分数据帧来计算我的阵容数据帧中的阵容得分。

供参考:

  • 阵容数据框:列=F1、F2、F3、F4、F5、F6,其中每列都是一名球员的姓名+'_'+他们的球员id
  • 梦幻点数数据框:列=玩家+ID,梦幻点数

我逐列为6名玩家获取6个幻想点数:

for col in ['F1', 'F2', 'F3', 'F4', 'F5', 'F6']:
lineups = lineups.join(sim_data[['Name_SlateID', 'Points']].set_index('Name_SlateID'), how='left', on=f'{col}', rsuffix = 'x')

然后,在我认为最简单的部分,我试图总结它们,我得到了Segmentation Fault:11

sum_columns = ['F1_points', 'F2_points', 'F3_points', 'F4_points', 'F5_points', 'F6_points']
lineups = reduce_memory_usage(lineups)
lineups[f'sim_{i}_points'] = lineups[sum_columns].sum(axis=1, skipna=True)

reduce_memory_use来自本文:https://towardsdatascience.com/6-pandas-mistakes-that-silently-tell-you-are-a-rookie-b566a252e60d

在运行这一行之前,我已经通过选择正确的dtypes将数据帧的内存减少了50%,我尝试使用pd.eval((,我尝试通过for循环逐列求和,但似乎什么都不起作用。

非常感谢您的帮助!

编辑:规格:OS-MacOS Monterey 12.2.1,python-3.8.8,pandas-1.4.1

以下是导致错误的行之前我的队列数据帧的详细信息:

Data columns (total 27 columns):
#   Column              Non-Null Count   Dtype  
---  ------              --------------   -----  
0   F1                  107056 non-null  object 
1   F2                  107056 non-null  object 
2   F3                  107056 non-null  object 
3   F4                  107056 non-null  object 
4   F5                  107056 non-null  object 
5   F6                  107056 non-null  object 
6   F1_own              107056 non-null  float16
7   F1_salary           107056 non-null  int16  
8   F2_own              107056 non-null  float16
9   F2_salary           107056 non-null  int16  
10  F3_own              107056 non-null  float16
11  F3_salary           107056 non-null  int16  
12  F4_own              107056 non-null  float16
13  F4_salary           107056 non-null  int16  
14  F5_own              107056 non-null  float16
15  F5_salary           107056 non-null  int16  
16  F6_own              107056 non-null  float16
17  F6_salary           107056 non-null  int16  
18  total_salary        107056 non-null  int32  
19  dupes               107056 non-null  float32
20  over_600_frequency  107056 non-null  int8   
21  F1_points           107056 non-null  float16
22  F2_points           107056 non-null  float16
23  F3_points           107056 non-null  float16
24  F4_points           107056 non-null  float16
25  F5_points           107056 non-null  float16
26  F6_points           107056 non-null  float16
dtypes: float16(12), float32(1), int16(6), int32(1), int8(1), object(6)
memory usage: 10.3+ MB

分段故障11表示您使用了大约8gb的内存。作为备份计划,有云解决方案(如AWS、GCP、Azure(可以为您提供足够的内存,Colab是免费的,可能足以满足您的需求。

就解决根本问题而言,如果你的日期集太大,可能不可能在这里使用熊猫。我还想看看你是否可以在内存中存储sim_data[['Name_SlateID','Points']],这样它就不会重新计算,你也可以像这样删除已经加入的数据帧。这些有帮助吗?

相关内容

  • 没有找到相关文章

最新更新