python - 从 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?
理想情况下,我想要一种不必手动输入数据类型的方法(不确定是否有这种方法)。
解决方案
对于未来的人:对于简单的数据类型,可以使用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}
希望这对某人有帮助。
干杯
推荐阅读
- javascript - 如何使用 HTML5 地理位置为谷歌地图 api 提供动态纬度和经度值?
- android - 为 android studio 添加特定的快捷方式
- python - 将嵌套字典展平为键和连接的字符串值
- c# - 在 c# 中调用 Http Post 方法传递方法名称
- python - Python- 从表列表中执行 SQL 查询,并将结果存储在每个表名的单独文件中
- vbscript - 有没有办法使用 vbscript 显示 Windows 10 toast 通知?
- typescript - 类型{}、对象、对象打字稿之间的区别
- javascript - 如何从一个对象数组中获取值到另一个对象数组中
- javascript - 有没有办法在“允许使用麦克风弹出”(chrome最新)中获得“允许”按钮单击事件?
- html - 如何圆桌角