获取Pandas读取的dtypes字典read_csv()

时间:2018-04-23 02:43:37

标签: python pandas csv dataframe types

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

可以使用以下方法创建dtypes字典:

dtypesDict = df.dtypes.to_dict()

产生:

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

如果我尝试使用此输出在硬编码中定义字典,以便它可以用于设置使用pd.read_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导入的dtypes列正确设置?

2 个答案:

答案 0 :(得分:3)

您可以使用dict执行zip,以使用dtype.name获取dtype名称

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

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

答案 1 :(得分:1)

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

await