gpt4 book ai didi

python - 在 Pandas 中,有没有一种方法可以在不使用 Eval 的情况下将数据转换为列表?

转载 作者:行者123 更新时间:2023-12-02 09:55:16 25 4
gpt4 key购买 nike

在 Pandas 中,有没有一种方法可以在不使用 Eval 的情况下将数据转换为列表?

我有以下 df,我想对列表使用数据帧操作,而不必首先使用 eval 将列表项转换为列表

#a b
#['4','2','6']
#['2','3','7']
#['1','2','8']

dff="""a
['4','2','6']
['2','3','7']
['1','2','8']"""


csvfile = io.StringIO("a b\n0 ['1','2','5'] ['2']\n1 ['2','3','4'] ['4']\n2 ['2','3','4'] []\n3 [] []\n")
df = pd.read_csv(csvfile, sep=' ')

如您所见,类型是对象:

df.a[0]                                                                                                                                                                                         
# "['4','2','6']"

df.a.to_numpy()
# array(["['4','2','6']", "['2','3','7']", "['1','2','8']"], dtype=object)

如何使用 pandas 将这些对象转换为列表而不是列表字符串?

我可以迭代项目并使用 eval 手动创建列表:

eval(df.a[0])
['4', '2', '6']

但我希望数据框具有列表对象,而不是列表字符串。那可能吗?将列表字符串转换为数据框对象中的实际列表?

最佳答案

使用ast.literal_eval使用转换器参数:

csvfile = io.StringIO("a b\n0 ['1','2','5'] ['2']\n1 ['2','3','4'] ['4']\n2 ['2','3','4'] []\n3 [] []\n")
df = pd.read_csv(csvfile, sep=' ', converters={'a' : ast.literal_eval, 'b' : ast.literal_eval })
print(df)

输出

           a    b
0 [1, 2, 5] [2]
1 [2, 3, 4] [4]
2 [2, 3, 4] []
3 [] []

如果您担心 eval 的危险,可以将 ast.literal_eval 视为 safe alternative .

关于python - 在 Pandas 中,有没有一种方法可以在不使用 Eval 的情况下将数据转换为列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58963336/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com