Python Can';t无法正确保存包含带有集合的列的数据帧
我有一个dataframe,它包含一个带有集合的列。当我使用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
.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()
。