Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/334.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 获取Pandas read_csv()读入的数据类型字典_Python_Pandas_Csv_Dataframe_Types - Fatal编程技术网

Python 获取Pandas read_csv()读入的数据类型字典

Python 获取Pandas read_csv()读入的数据类型字典,python,pandas,csv,dataframe,types,Python,Pandas,Csv,Dataframe,Types,我有一个从SQL数据库导入的大熊猫数据框架。整个过程需要几个小时。当我处理数据时,不可避免地会改变数据帧,我经常想回到“已知良好的数据集”并重新运行各种函数。我不想从数据库中导入数据,而是想将分析过程中各个点的数据保存为CSV文件,然后根据需要使用CSV文件恢复数据;CSV是首选的格式,因为出于某种原因,我没有太多的运气来处理数据帧。只需使用pd.read_CSV()导入CSV数据即可更改列的数据类型。因此,我想创建一个数据类型字典,当将CSV导入回数据帧时,可以使用它来恢复数据类型 例如,简单

我有一个从SQL数据库导入的大熊猫数据框架。整个过程需要几个小时。当我处理数据时,不可避免地会改变数据帧,我经常想回到“已知良好的数据集”并重新运行各种函数。我不想从数据库中导入数据,而是想将分析过程中各个点的数据保存为CSV文件,然后根据需要使用CSV文件恢复数据;CSV是首选的格式,因为出于某种原因,我没有太多的运气来处理数据帧。只需使用pd.read_CSV()导入CSV数据即可更改列的数据类型。因此,我想创建一个数据类型字典,当将CSV导入回数据帧时,可以使用它来恢复数据类型

例如,简单数据帧的定义如下所示:

df = pd.DataFrame({'A':[1,2,3,4,5],'B':['a','b','c','d','e'],'C':[1.2,3.4,5.6,7.8,9.0]},index=[0,2,4,6,8])
这看起来像:

   A  B    C
0  1  a  1.2
2  2  b  3.4
4  3  c  5.6
6  4  d  7.8
8  5  e  9.0
可以使用以下方法创建数据类型字典:

dtypesDict = df.dtypes.to_dict()
产生:

{'B': dtype('O'), 'C': dtype('float64'), 'A': dtype('int64')}
如果我尝试使用此输出在硬代码中定义字典,以便可以使用它设置使用
pd.read\u csv()
导入的列的数据类型,则失败如下:

dtypesDict = {'B': dtype('O'), 'C': dtype('float64'), 'A': dtype('int64')}

NameError: name 'dtype' is not defined
但是,将字典定义为:

dtypesDict = {'B': 'O', 'C': 'float64', 'A': 'int64'}
允许导入CSV文件而不会出现问题

我认为理解词典是一种方法,但我无法做到:

dtypesDict = {k:bit_in_brackets_of_v for k,v in df.dtypes.to_dict().items()}

如何自动生成一个格式正确的字典,该字典可以使用简单的剪切粘贴过程在硬代码中定义,并允许正确设置从CSV导入的列的数据类型?

您可以使用
zip
执行
dict
,使用
dtype.name

dict(zip(list(df),[df[x].dtype.name for x in df]))

Out[6]: {'A': 'int64', 'B': 'object', 'C': 'float64'}

为了确保列名与其数据类型之间的一致性:

dict(([(dataframe[x].name, dataframe[x].dtype.name)  for x in dataframe]))

对于CSV导入或pickle变得痛苦的大型数据帧,请使用。或者是熊猫的较新的
dask
ray
后端(“光线上的熊猫:通过替换一行代码使熊猫[>=4x]更快”)