Python Can';t无法正确保存包含带有集合的列的数据帧

Python Can';t无法正确保存包含带有集合的列的数据帧,python,pandas,Python,Pandas,我有一个dataframe,它包含一个带有集合的列。当我使用.to_csv()保存数据帧,然后使用pd.read_csv()重新打开它时,包含集合的列现在包含字符串 下面是一个代码示例: df = pd.DataFrame({'numbers':[1,2,3], 'sets':[set('abc'),set('XYZ'),set([1,2,3])]}) print(type(df.sets[0])) # Type = set df.to_csv('xxx/test.csv') df = pd

我有一个dataframe,它包含一个带有集合的列。当我使用
.to_csv()
保存数据帧,然后使用
pd.read_csv()
重新打开它时,包含集合的列现在包含字符串

下面是一个代码示例:

df = pd.DataFrame({'numbers':[1,2,3], 'sets':[set('abc'),set('XYZ'),set([1,2,3])]})
print(type(df.sets[0])) # Type = set

df.to_csv('xxx/test.csv')

df = pd.read_csv('xxx/test.csv', header=0, index_col=0)
print(type(df.sets[0])) # Type = str
有没有办法避免类型更改?我无法从
.to\u csv()
pd中找到哪个参数。read\u csv()
控制此行为


我发现解决这个问题的唯一方法是使用pickle,但我猜有一种方法可以解决熊猫的问题。

你知道什么是csv文件吗?它只是一个文本文件。您可以用vi或记事本打开它以确保安全

这意味着保存在csv文件中的内容只是字段的文本表示形式
read_csv
尽最大努力转换回整数和浮点值。如果使用
parse_date
参数,它甚至可以找到日期

在这里,您可以使用
ast.literal\u eval
作为自定义转换器:

import ast
...
df = pd.read_csv('xxx/test.csv', header=0, index_col=0,
                 converters={'sets': ast.literal_eval})

最后,最简单的解决方案是在处理包含集合或其他对象的数据帧时,使用Pandas的
.to\u pickle()
.read\u pickle()