我正在做一个日常幻想体育项目。
我有一个数据帧,其中包含可能的阵容(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']],这样它就不会重新计算,你也可以像这样删除已经加入的数据帧。这些有帮助吗?