【发布时间】:2019-07-14 22:24:53
【问题描述】:
我有数据,其中一列是数字列表,但是当保存到 CSV 时,我猜这被存储为字符串。 我想将此字符串列表转换回列表列表。
这就是我的数据现在的样子:
import pandas as pd
from ast import literal_eval
colors = ["(120, 120, 80)", "(90, 10, 100)"]
names = ["name1", "name2"]
data = {
"colors":colors,
"names":names
}
df = pd.DataFrame(data)
通过阅读 Stackoverflow,我尝试了文字 eval 方法,但它不起作用:
try:
df['colors'] = literal_eval( df['colors'].tolist() )
except ValueError as e:
print(e)
我收到格式错误的字符串错误。
【问题讨论】:
-
@Dan 来自
ast.literal_eval(node_or_string)上的 Python 文档:“安全地评估表达式节点或包含 Python 文字或容器显示的字符串。提供的字符串或节点可能仅包含以下 Python 文字结构: 字符串、字节、数字、元组、列表、字典、集合、布尔值和无。这可用于安全地评估包含来自不受信任来源的 Python 值的字符串,而无需自己解析值。它不能任意评估复杂的表达式,例如涉及运算符或索引。" -
@ChristopherPeisert 感谢您提供的信息!
-
[[int(channel) for channel in re.findall(r'\d+', color)] for color in colors]
标签: python pandas csv literals