首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ValueError:无法将字符串转换为浮点型:(pd.Series)

ValueError:无法将字符串转换为浮点型:(pd.Series)
EN

Stack Overflow用户
提问于 2020-12-25 05:44:09
回答 1查看 387关注 0票数 2

我在下面的代码片段中执行'lambda function‘失败。

我希望的目标是分别拆分列( btts_x和btts_y )以进行进一步的数学计算。

λ函数在第一个位置列btts_x上成功(参见btts_x_1 & btts_x_2 );但在列btts_y上失败,如traceback re ValueError所示。我想我需要在lambda函数中传递一个re.sub(),但是我被它卡住了,希望能得到帮助!

注意: Team_x中的特殊字符\n\n Team_y中的& \n;因此会出现re.sub()问题

代码语言:javascript
复制
def results(frame):
    frame[['btts_x_1', 'btts_x_2']] = frame['btts_x'].apply(lambda x: x.split('\n\n')).apply(pd.Series).astype(float)
    frame[['btts_y_1', 'btts_y_2']] = frame['btts_y'].apply(lambda x: x.split('\n\n')).apply(pd.Series).astype(float)



                             Teams_x          btts_x    Teams_y                             btts_y  btts_x_1    btts_x_2
0   Leicester City vs Manchester United    1.55\n\n2.40 Leicester City vs Manchester United 1.50\n2.40  1.55    2.40
1   Aston Villa vs Crystal Palace          1.68\n\n2.14 Aston Villa vs Crystal Palace       1.60\n2.20  1.68    2.14
2   Fulham vs Southampton                  1.72\n\n2.08 Fulham FC vs Southampton FC         1.70\n2.00  1.72    2.08
3   Arsenal vs Chelsea                     1.79\n\n1.98 Arsenal FC vs Chelsea FC            1.70\n2.00  1.79    1.98
...

TraceBack....
4     frame[['btts_x_1', 'btts_x_2']] = frame['btts_x'].apply(lambda x: x.split('\n\n')).apply(pd.Series).astype(float)
----> 5     frame[['btts_y_1', 'btts_y_2']] = frame['btts_y'].apply(lambda x: x.split('\n\n')).apply(pd.Series).astype(float)
      6 
      7 #     frame[['btts_x_1', 'btts_x_2']] = frame['btts_x'].apply(lambda x: x.split('\n')).apply(pd.Series).astype(float)

D:\Anaconda\envs\web_scraping\lib\site-packages\pandas\core\generic.py in astype(self, dtype, copy, errors)
   5546         else:
   5547             # else, only a single dtype is given
-> 5548             new_data = self._mgr.astype(dtype=dtype, copy=copy, errors=errors,)
   5549             return self._constructor(new_data).__finalize__(self, method="astype")
   5550 

D:\Anaconda\envs\web_scraping\lib\site-packages\pandas\core\internals\managers.py in astype(self, dtype, copy, errors)
    602         self, dtype, copy: bool = False, errors: str = "raise"
    603     ) -> "BlockManager":
--> 604         return self.apply("astype", dtype=dtype, copy=copy, errors=errors)
    605 
    606     def convert(

D:\Anaconda\envs\web_scraping\lib\site-packages\pandas\core\internals\managers.py in apply(self, f, align_keys, **kwargs)
    407                 applied = b.apply(f, **kwargs)
    408             else:
--> 409                 applied = getattr(b, f)(**kwargs)
    410             result_blocks = _extend_blocks(applied, result_blocks)
    411 

D:\Anaconda\envs\web_scraping\lib\site-packages\pandas\core\internals\blocks.py in astype(self, dtype, copy, errors)
    593             vals1d = values.ravel()
    594             try:
--> 595                 values = astype_nansafe(vals1d, dtype, copy=True)
    596             except (ValueError, TypeError):
    597                 # e.g. astype_nansafe can fail on object-dtype of strings

D:\Anaconda\envs\web_scraping\lib\site-packages\pandas\core\dtypes\cast.py in astype_nansafe(arr, dtype, copy, skipna)
    995     if copy or is_object_dtype(arr) or is_object_dtype(dtype):
    996         # Explicit copy, or required since NumPy can't view from / to object.
--> 997         return arr.astype(dtype, copy=True)
    998 
    999     return arr.view(dtype)

ValueError: could not convert string to float: '1.50\n2.40'

很抱歉让你这么久。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-12-25 05:50:39

让我们尝试按原始字符串'\n\n‘拆分,展开并重命名这些列

代码语言:javascript
复制
 df['x']=df.btts_x+ " "+df.btts_y
df1=df.join(df['x'].str.split(r'\n\n|\n|\s|\n', expand=True)).rename(columns={0:'btts_x_1',1:'btts_x_2',2:'btts_y_1',3:'btts_y_2'}).drop(columns=['x'])
print(df1)

                            Teams_x        btts_x  \
0  Leicester City vs Manchester United  1.55\n\n2.40   
1        Aston Villa vs Crystal Palace  1.68\n\n2.14   
2                Fulham vs Southampton  1.72\n\n2.08   
3                   Arsenal vs Chelsea  1.79\n\n1.98   

                               Teams_y      btts_y btts_x_1 btts_x_2 btts_y_1  \
0  Leicester City vs Manchester United  1.50\n2.40     1.55     2.40     1.50   
1        Aston Villa vs Crystal Palace  1.60\n2.20     1.68     2.14     1.60   
2          Fulham FC vs Southampton FC  1.70\n2.00     1.72     2.08     1.70   
3             Arsenal FC vs Chelsea FC  1.70\n2.00     1.79     1.98     1.70   

  btts_y_2  
0     2.40  
1     2.20  
2     2.00  
3     2.00 
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65443467

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档