【问题标题】:Any easy way to strip off the dtype from pandas.dtypes.to_dict()?从 pandas.dtypes.to_dict() 中剥离 dtype 的任何简单方法?
【发布时间】:2021-06-06 07:28:21
【问题描述】:

我正在阅读一个大的 csv 文件。为了在读取时正确设置数据类型,我仅读取 5 行样本,然后获取 pandas 推断的 dtypes。然后,我想手动编辑它以正确配置数据类型,然后调用 read_csv 来读取完整文件。

但是,当我执行 df1.dtypes.to_dict()pandas 时,会产生这个

{'Invoice Date': dtype('O'),
 'Invoice ID': dtype('O'),
 'Item ID': dtype('float64'),
 'Line Amount': dtype('float64'),
 'Line Amount Tax': dtype('float64')
}

我不想要那个 dtype,因为当我粘贴它以将其分配给我编辑的临时 dict 时出现错误。因此,我将此输出复制并粘贴到 VSCode,使用正则表达式提取以下输出:

{'Invoice Date': O,
 'Invoice ID': O,
 'Item ID': float64,
 'Line Amount': float64,
 'Line Amount Tax': float64
}

有什么方法可以直接在 pandas 中获取?

【问题讨论】:

    标签: python pandas numpy numpy-dtype


    【解决方案1】:

    您可以将值转换为字符串,对于object,请使用Series.replace

    df = pd.DataFrame({
            'A':list('abcdef'),
             'B':[4,5,4,5,5,4],
             'C':[7,8,9,4,2,3],
             'D':[1,3,5.,7,1,0],
             'E':[5,3,6,9,2,4.],
    
        })
    
    print (df.dtypes.astype(str).replace('object','O').to_dict())
    {'A': 'O', 'B': 'int64', 'C': 'int64', 'D': 'float64', 'E': 'float64'}
    

    【讨论】:

    • 非常感谢。简单而美丽。我什至不需要用对象替换,因为对象也可以。
    【解决方案2】:

    您可以使用np.dtypes.name Series.map 在这里。

    # Thanks to Jezrael for df
    df = pd.DataFrame(
        {
            "A": list("abcdef"),
            "B": [4, 5, 4, 5, 5, 4],
            "C": [7, 8, 9, 4, 2, 3],
            "D": [1, 3, 5.0, 7, 1, 0],
            "E": [5, 3, 6, 9, 2, 4.0],
        }
    )
    
    df.dtypes.map(lambda x: x.name).to_dict()
    # {'A': 'object', 'B': 'int64', 'C': 'int64', 'D': 'float64', 'E': 'float64'}
    

    如果你想避开lambda,那么我们可以使用operator.attrgetter

    from operator import attrgetter
    
    dtype_getter = attrgetter('name')
    df.dtypes.map(dtype_getter).to_dict()
    # {'A': 'object', 'B': 'int64', 'C': 'int64', 'D': 'float64', 'E': 'float64'}
    

    【讨论】:

    • 非常好的解决方案。虽然我知道地图,但我想不出这个解决方案。因此,我学到了一些新东西。非常感谢您的宝贵时间。
    猜你喜欢
    • 2017-11-12
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 2011-08-10
    • 1970-01-01
    • 1970-01-01
    • 2020-11-15
    • 1970-01-01
    相关资源
    最近更新 更多