从csv文件读取Pandas数据帧并转换为Python类型

时间:2020-06-28 19:38:17

标签: python pandas csv

我想读取一个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?

理想情况下,我想要一种不必手动输入数据类型的方法(不确定是否有这种方法)。

1 个答案:

答案 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}

希望这对某人有帮助。

欢呼