首页 > 解决方案 > 从 csv 文件中读取 Pandas 数据帧并转换为 Python 类型

问题描述

我想读取带有特定 python 类型元素的 Pandas 数据框,例如数组和字典,以及 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?

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

标签: pythonpandascsv

解决方案


对于未来的人:对于简单的数据类型,可以使用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}

希望这对某人有帮助。

干杯


推荐阅读