首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将字符串转换为浮点值

将字符串转换为浮点值
EN

Stack Overflow用户
提问于 2022-10-26 09:59:05
回答 4查看 77关注 0票数 1

我从一个pdf文件中复制了一个三列的表。我在此附上PDF截图:

padj列中的值是指数值,但是,当您将pdf复制到excel,然后用熊猫打开它时,这些值是字符串或对象数据类型。因此,不能将这些值解析为浮点数或数值。我需要这些值作为浮动,而不是字符串。有人能帮我提些建议吗?到目前为止,这是我尝试过的。

然后使用UnicodeDecodeError编码在python中打开excel或csv文件,以避免使用escape_unicode

代码语言:javascript
运行
复制
## open the file
df       = pd.read_csv("S2_GSE184956.csv",header=0,sep=',',encoding='unicode_escape')[["DEGs","LFC","padj"]]

   df.head()
        DEGs   padj          LFC
    0   JUNB    1.5 ×10-8   -1.273329
    1   HOOK2   2.39×10-7   -1.109320
    2   EGR1    3.17×10-6   -4.187828
    3   DUSP1   3.95×10-6   -3.251030
    4   IL6     3.95×10-6   -3.415500
    5   ARL4C   5.06×10-6   -2.147519
    6   NR4A2   2.94×10-4   -3.001167
    7   CCL3L1  4.026×10-4  -5.293694


# Convert the string to float by replacing the x10- with exponential sign 
    df['padj'] = df['padj'].apply(lambda x: (unidecode(x).replace('x10-','x10-e'))).astype(float)
That threw an error,

    ValueError: could not convert string to float: '1.5 x10-e8'

如有任何建议,将不胜感激。谢谢

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2022-10-26 10:19:21

通过在this last edit上的问题中共享数据,下面使用pandas.Series.str.replacepandas.Series.astype将完成这项工作:

代码语言:javascript
运行
复制
df['padj'] = df['padj'].str.replace('×10','e').str.replace(' ', '').astype(float)

目标是使单元格看起来像下面的1.560000e-08

备注:

  • 视数据的其余部分而定,可能仍然需要进行额外的调整,例如删除其中一个单元格中可能存在的空格'。为此,可以使用pandas.Series.str.replace,如下所示

df‘’padj‘=df’‘padj’.str.替换(“‘”,’)

票数 1
EN

Stack Overflow用户

发布于 2022-10-26 10:20:18

考虑到您的示例(列padj),下面的代码应该可以工作:

代码语言:javascript
运行
复制
f_value = eval(str_float.replace('x10', 'e').replace(' ', ''))
票数 1
EN

Stack Overflow用户

发布于 2022-10-26 10:37:55

根据您提供的数据进行更新。最重要的是,x实际上是一个时代符号:

代码语言:javascript
运行
复制
import pandas as pd
DEGs = ["JUNB", "HOOK2", "EGR1", "DUSP1", "IL6", "ARL4C", "NR4A2", "CCL3L1"]
padj = ["1.5 ×10-8", "2.39×10-7", "3.17×10-6", "3.95×10-6", "3.95×10-6", "5.06×10-6", "2.94×10-4", "4.026×10-4"]
LFC = ["-1.273329", "-1.109320", "-4.187828", "-3.251030", "-3.415500", "-2.147519", "-3.001167", "-5.293694"]
df = pd.DataFrame({'DEGs': DEGs, 'padj': padj, 'LFC': LFC})
# change to python-friendly float format
df['padj'] = df['padj'].str.replace(' ×10-', 'e-', regex=False)
df['padj'] = df['padj'].str.replace('×10-', 'e-', regex=False)
# convert padj from string to float
df['padj'] = df['padj'].astype(float)

会给你这个数据:

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

https://stackoverflow.com/questions/74205860

复制
相关文章

相似问题

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