【发布时间】:2021-07-29 08:39:43
【问题描述】:
我们有以下凌乱的数据框:
print(df[7:9].to_dict())
{'Scheduled': {7: 'END 3RD: 0-0, 3 Out917YankeesNYY918RaysTB', 8: 'TOP 3RD: 1-2, 2 Out915Blue JaysTOR916Red SoxBOS'}, 'Open': {7: '+115-135', 8: '-115-105'}, 'Best Odds': {7: '+125ML+130ML', 8: '+120ML-125ML'}, '% of Bets': {7: '55%45%', 8: '31%69%'}, '% of Money': {7: '34%66%', 8: nan}, 'Diff': {7: '+21%', 8: nan}, 'Bets': {7: 12445, 8: 6178}}
df[7:9]
Scheduled Open Best Odds % of Bets % of Money Diff Bets
7 END 3RD: 0-0, 3 Out917YankeesNYY918RaysTB +115-135 +125ML+130ML 55%45% 34%66% +21% 12445
8 TOP 3RD: 1-2, 2 Out915Blue JaysTOR916Red SoxBOS -115-105 +120ML-125ML 31%69% NaN NaN 6178
df.dtypes
Scheduled object
Open object
Best Odds object
% of Bets object
% of Money object
Diff object
Bets int64
dtype: object
编辑:我尝试将print(df[7:9].to_dict()) 的输出粘贴到笔记本单元格中以运行代码,并收到错误NameError: name 'nan' is not defined。不确定如何分享可重现的示例?
我们正在遍历df,试图将其中一些列拆分为 2 列,因为每列包含 2 个团队的数据。 NaN 值导致问题,我们不能使用 math.isnan() 因为% of Money 是一列字符串,math.isnan() 似乎返回字符串错误。以下代码对我们不利:
for i, row in df.iterrows():
string = row['% of Money']
if len(string) == 2:
num_pair_perc_mon = [string[0], string[1]]
else:
split_index = min([i for i, char in enumerate(string) if char in ['%']])
num_pair_perc_mon = [string[:split_index + 1], string[split_index + 1:]]
print(num_pair_perc_mon)
df.at[i, 't1_pct_money'] = num_pair_perc_mon[0]
df.at[i, 't2_pct_money'] = num_pair_perc_mon[1]
带输出:
我们如何成功地将% of Money 拆分为 2 列,处理我们在数据框中提供的 NaN?
【问题讨论】:
-
nan完全没问题。from numpy import nan将使它不是未定义的。 -
min([i for i, char in enumerate(string) if char in ['%']])是一个问题,因为min无法处理空集合。当单元格中没有任何东西时,您希望如何处理这个问题?