首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将熊猫的df.get函数用于dataframe列,以使列中的每一行都保持自己的值?

如何将熊猫的df.get函数用于dataframe列,以使列中的每一行都保持自己的值?
EN

Stack Overflow用户
提问于 2022-05-29 20:39:02
回答 2查看 64关注 0票数 0

为了尽可能简洁地总结,我有一个数据文件,其中包含化学化合物的列表以及它们的ID号("CID“编号)。我的目标是使用pubchempy的pubchempy.get_properties函数和熊猫的df.map函数来获得每个化合物的属性(每一行有一个化合物),使用"CID“数字作为标识符。pubchempy.get_properties的参数是一个标识符(本例中为“CID”号)以及您想从pubchem网站获得的化学特性(本例中为分子量)。

这是我目前编写的代码:

代码语言:javascript
复制
import pandas as pd

import pubchempy

import numpy as np

df = pd.read_csv("Data.tsv.txt", sep="\t")

from pubchempy import get_properties

df['CID'] = df['CID'].astype(str).apply(lambda x: x.replace('.0',''))

df['CID'] = df['CID'].astype(str).apply(lambda x: x.replace('0',''))

df = df.drop(df[df.CID=='nan'].index)

df = df.drop( df.index.to_list()[5:] ,axis = 0 )

df['CID']= df['CID'].map(lambda x: get_properties(identifier=x, properties='MolecularWeight') if float(x) > 0 else pd.NA)

df = df.rename(columns={'CID.': 'MolecularWeight'})

print(df)

这是我最初为该列获得的输出(实际上,dataset非常大):

MolecularWeight

{“CID”:5339,“MolecularWeight”:“398.4”}

{“CID”:3889,“MolecularWeight”:“520.5”}

{“CID”:2788,“MolecularWeight”:“305.50”}

{“CID”:1422517,“MolecularWeight”:'440.5'}

现在,代码有点起作用了,因为它提供了化合物(398.4)的分子量,但我不想要那么多的文字,我也不想在分子量数字周围加上引号(这两种方法都妨碍了我计划编写的下一段代码)。

然后,我添加了这段代码:

代码语言:javascript
复制
df['MolecularWeight'] = df.MolecularWeight[0][0].get('MolecularWeight')

这是我现在得到的输出:

MolecularWeight

398.4

398.4

398.4

398.4

我想要做的几乎是完全一样的,只是不想得到MolecularWeight列中第一行的分子量,而是将它复制到所有其他行,而是将该列中每一行的分子量值作为输出。

我希望得到的是这样的东西:

MolecularWeight

398.4

520.5

305.50

440.5

有人知道我怎么能解决这个问题吗?我花了好几个小时想办法自己解决这个问题,却没有运气。我很感谢你的帮助!

几行文本文件:

代码语言:javascript
复制
NO. compound_name   IUPAC_name  SMILES  CID     Inchi   threshold   reference   group   comments
1   sulphasalazine  2-hydroxy-5-[[4-(pyridin-2-ylsulfamoyl)phenyl]diazenyl]benzoic acid O=C(O)c1cc(N=Nc2ccc(S(=O)(=O)Nc3ccccn3)cc2)ccc1O    5339    InChI=1S/C18H14N4O5S/c23-16-9-6-13(11-15(16)18(24)25)21-20-12-4-7-14(8-5-12)28(26,27)22-17-3-1-2-10-19-17/h1-11,23H,(H,19,22)(H,24,25)      R2|R2|R25|R46|  A   
2   moxalactam  7-[[2-carboxy-2-(4-hydroxyphenyl)acetyl]amino]-7-methoxy-3-[(1-methyltetrazol-5-yl)sulfanylmethyl]-8-oxo-5-oxa-1-azabicyclo[4.2.0]oct-2-ene-2-carboxylic acid   COC1(NC(=O)C(C(=O)O)c2ccc(O)cc2)C(=O)N2C(C(=O)O)=C(CSc3nnnn3C)COC21 3889    InChI=1S/C20H20N6O9S/c1-25-19(22-23-24-25)36-8-10-7-35-18-20(34-2,17(33)26(18)13(10)16(31)32)21-14(28)12(15(29)30)9-3-5-11(27)6-4-9/h3-6,12,18,27H,7-8H2,1-2H3,(H,21,28)(H,29,30)(H,31,32)      R25|    A   
3   clioquinol  5-chloro-7-iodoquinolin-8-ol    Oc1c(I)cc(Cl)c2cccnc12  2788    InChI=1S/C9H5ClINO/c10-6-4-7(11)9(13)8-5(6)2-1-3-12-8/h1-4,13H      R18|R26|R27|    A   
EN

回答 2

Stack Overflow用户

发布于 2022-05-29 20:44:30

如果您将列强制转换为浮动,这将有助于您:df['MolecularWeight'] = df['MolecularWeight'].astype(float)

票数 0
EN

Stack Overflow用户

发布于 2022-05-29 21:11:27

您可能需要从每个CID获得多个属性:

代码语言:javascript
复制
props = ['HBondDonorCount', 'RotatableBondCount', 'MolecularWeight']
df2 = pd.DataFrame(get_properties(identifier=df.CID.to_list(), properties=props))
print(df2)

输出:

代码语言:javascript
复制
    CID HBondDonorCount  RotatableBondCount  MolecularWeight
0  5339           398.4                   3                6
1  3889           520.5                   4                9
2  2788          305.50                   1                0

然后,可以将这些信息合并到原始的dataframe:

代码语言:javascript
复制
df = df.merge(df2)  # df = df.merge(pd.DataFrame(get_properties(identifier=df.CID.to_list(), properties=props)))
print(df)

...

   NO.   compound_name                                         IUPAC_name                                             SMILES   CID                                              Inchi  threshold       reference group  comments MolecularWeight  HBondDonorCount  RotatableBondCount
0    1  sulphasalazine  2-hydroxy-5-[[4-(pyridin-2-ylsulfamoyl)phenyl]...   O=C(O)c1cc(N=Nc2ccc(S(=O)(=O)Nc3ccccn3)cc2)ccc1O  5339  InChI=1S/C18H14N4O5S/c23-16-9-6-13(11-15(16)18...        NaN  R2|R2|R25|R46|     A       NaN           398.4                3                   6
1    2      moxalactam  7-[[2-carboxy-2-(4-hydroxyphenyl)acetyl]amino]...  COC1(NC(=O)C(C(=O)O)c2ccc(O)cc2)C(=O)N2C(C(=O)...  3889  InChI=1S/C20H20N6O9S/c1-25-19(22-23-24-25)36-8...        NaN            R25|     A       NaN           520.5                4                   9
2    3      clioquinol                       5-chloro-7-iodoquinolin-8-ol                             Oc1c(I)cc(Cl)c2cccnc12  2788  InChI=1S/C9H5ClINO/c10-6-4-7(11)9(13)8-5(6)2-1...        NaN    R18|R26|R27|     A       NaN          305.50                1                   0
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72427123

复制
相关文章

相似问题

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