【问题标题】:Get dictionary of dtypes as read in by Pandas read_csv()获取 Pandas read_csv() 读入的 dtypes 字典
【发布时间】:2018-10-03 00:07:50
【问题描述】:

我有一个从 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()}

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

【问题讨论】:

  • 对于 CSV 导入或 pickle 变得很痛苦的大型数据框,请使用 pandas HDFStore support。或者更新的 daskray 后端到 Pandas(“Pandas on Ray:通过替换一行代码让 Pandas [>=4x] 更快”

标签: python pandas csv dataframe types


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:

    为了保证列名与其数据类型一致:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-23
      • 1970-01-01
      • 1970-01-01
      • 2014-09-05
      • 2020-04-03
      • 2016-12-12
      • 2019-07-22
      • 2020-03-02
      相关资源
      最近更新 更多