【问题标题】:Pandas DataFrame - What is the correct way to operate with multiple values in one cell?Pandas DataFrame - 在一个单元格中操作多个值的正确方法是什么?
【发布时间】:2022-01-25 20:34:56
【问题描述】:

我正在处理一个包含基因名称和基因 ID 的数据集。基本上id是唯一定义的,一个名字可以对应多个id。

我使用一个列表来包含基因名称的所有 id,数据框如下所示:

|GeneName|GeneID|
|Name_1|[ID_1, ID_2, ID_5]|
|Name_2|[ID_3, ID_4]|

所有名称和 ID 都是字符串,但缺少一些 ID,我使用 NaN 表示缺失的 ID(也不确定这是否是一个好习惯)。

将数据框保存到 csv 文件并加载回来后,所有包含基因 ID 的列表都被视为字符串。我找到了一个解决方案:

pd.read_csv(fpath, converters={'GeneName': pd.eval, 'GeneID': pd.eval})

将它们加载为列表,但我遇到

pandas.core.computation.ops.UndefinedVariableError: name 'NaN' is not defined

处理这种情况的最佳解决方案是什么? 谢谢。

【问题讨论】:

  • 你最终想要的输出是什么?一种热编码或二进制/十六进制编码是一种选择吗?
  • 您可以使用空字符串来表示缺失的 id,即''
  • 好吧,我暂时只是想将数据框保存到 csv 文件中并能够将其加载回来。我找不到解决“NaN”错误的有效解决方案。
  • @MuhammadHassan 您好,我尝试使用'' 替换NaN,但现在错误变为ValueError: expr cannot be an empty string
  • 尝试使用空数组,即[]

标签: python pandas dataframe


【解决方案1】:

根据您在 cmets 中描述的问题,您可以只使用空字符串来指示缺少的类别。
然后使用 pd.eval 或 ast.literal_eval:

import ast
ast.literal_eval('["ID_1", "ID_2", "", "", "ID_5"]')

>>['ID_1', 'ID_2', '', '', 'ID_5']

重要提示:
对列表字符串和列表元素字符串使用不同的 ' 和 "

【讨论】:

    猜你喜欢
    • 2016-01-06
    • 2018-06-05
    • 2014-06-03
    • 2017-03-05
    • 2018-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多