使用python列表作为dtype

时间:2018-06-28 06:19:56

标签: pandas

我加载格式为

的csv文件
fieldA|fieldB|fieldC| 
     X|     Y| 3,4,5|

我希望熊猫将“ 3,4,5”作为python列表(也称为pandas.read_csv(..., dtypes={"fieldC": list},...)

)加载

现在,当调用read_csv时,我通过了以下转换器

def _convert_to_list(x, field="pass a field to debug"):
    return list(map(int, x.split(','))) if (x is not None and x != '') else np.nan

但是我正处于从csv加载/保存/重新加载这些数据帧的阶段,这些列表是bug的来源。由于此扩展名http://pandas.pydata.org/pandas-docs/stable/generated/pandas.api.extensions.ExtensionArray.html#pandas.api.extensions.ExtensionArray,我已将熊猫版本升级到0.23,但我不知道该怎么做。这对我的用例有用吗?我能从中得到什么启发吗?

2 个答案:

答案 0 :(得分:1)

您可以使用ast.literal_eval

https://docs.python.org/3/library/ast.html#ast.literal_eval

  

ast.literal_eval(node_or_string)

     

安全地评估包含Python>文字或容器显示的表达式节点或字符串。提供的字符串或节点只能由以下Python文字结构组成:字符串,字节,数字,元组,列表,字典,集合,布尔值和无。

     

这可用于从不受信任的来源安全地评估包含Python值的字符串,而无需自己解析值。它>不能评估任意复杂的表达式,例如>涉及运算符或索引。

答案 1 :(得分:0)

我认为ExtensionArray工具不会为您提供DataFrame的输入/输出,其中list包含的列包含ExtensionArray类型的对象。 ExtensionArray设计中没有任何东西可以解决输入/输出问题。

您可以在目录decimal的子目录jsonpandas/tests/extension/中找到let result = paramsid.filter(obj => { return obj.dt_txt.includes("2018-06-28"); }); 的示例。这些示例都没有对输入/输出做任何事情。