我想读取一个Pandas数据框,其中包含特定python类型的元素,例如数组和字典以及numpy数组。我想阅读它以便可以立即与它们一起使用(现在它们以字符串形式读取)。我该怎么办?
我想要类似于ast.literal_eval的功能,但希望有一种方法可以在不循环整个数据帧的情况下实现。
编辑:根据要求,是一个最小的可复制示例。
import pandas as pd
import numpy as np
output = pd.DataFrame()
data = {'integer':1, 'list': [1,2,3], 'dictionary':{}, 'np_arrar' = np.array([1,2,3]}
output = output.append({}, ignore_index=True)
filename = 'data.csv'
output.to_csv(filename)
input_data = pd.read_csv(filename, ???) # What to do here?
理想情况下,我想要一种不必手动输入数据类型的方法(不确定是否有这种方法)。
答案 0 :(得分:0)
对于未来的人们:对于简单的数据类型,可以像这样使用dtype
参数
input_data = pd.read_csv(filename, dtype = {'integer':'int'})
但是,对于对象,这不能正常工作。然后,您可以改为使用converters
参数。这是一个函数字典,用于转换数据中的特定列。可以使用ast.literal_eval
中的功能ast
input_data = pd.read_csv(filename, converters= {'integer': ast.literal_eval, 'dictionary': ast.literal_eval, 'list': ast.literal_eval}
请注意,这不适用于numpy数组,因为您将遇到错误SyntaxError: invalid syntax
,因为numpy数组存储时没有逗号,这不是有效的Python语法。相反,您可以定义自己的函数
def string_to_numpyArray(x):
return np.fromstring(x[1:-1],dtype = float, sep = ' ')
然后按如下所示使用它
input_data = pd.read_csv(filename, converters= {'integer': ast.literal_eval, 'dictionary': ast.literal_eval, 'list': ast.literal_eval, 'np_list':string_to_numpyArray}
希望这对某人有帮助。
欢呼