首页 > 解决方案 > 使用 python 列表作为 dtype

问题描述

我加载表单的 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 加载/保存/重新加载这些数据帧的阶段,这些列表是错误的来源。由于这个扩展http://pandas.pydata.org/pandas-docs/stable/generated/pandas.api.extensions.ExtensionArray.html#pandas.api.extensions.ExtensionArray我已经将我的熊猫版本升级到 0.23但我不知道该怎么做。这对我的用例有用吗?我可以从中获得灵感的任何例子吗?

标签: pandas

解决方案


您可以使用 ast.literal_eval

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

ast.literal_eval(node_or_string)

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

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


推荐阅读