【问题标题】:How to convert pandas dataframe columns to native python data types?如何将 pandas 数据框列转换为本机 python 数据类型?
【发布时间】:2018-05-05 13:20:51
【问题描述】:

我有一个数据框,其列数据类型需要映射到 python 本机数据类型。

我希望能够从 numpy 获取字典并将每一列转换为它的本机类型。

例如:

{numpy.object_: object,
 numpy.bool_: bool,
 numpy.string_: str,
 numpy.unicode_: unicode,
 numpy.int64: int,
 numpy.float64: float,
 numpy.complex128: complex}

astypepd.to_numeric 我都试过了,都没有充分地向下转换列。

df['source'] = df['source'].astype(int) 返回int32pd.to_numeric 也是如此

更新:

大多数 cmets 质疑这样做是否明智。 networkx 读取 dataframes 并接受 np datatypes。然而,由于这个有据可查的错误,无法使用json_dumps 编写图表:TypeError: Object of type 'int64' is not JSON serializable

谢谢

【问题讨论】:

  • 不,你不能。你为什么要?将它们作为 numpy 类型处理要快得多。
  • 对于 numpy 数组,tolist()item()(对于一个元素)是获取列表或原生 Python 对象的最佳方式。 astype 只是改变数组dtype

标签: python python-3.x pandas numpy dataframe


【解决方案1】:

Pandas 和扩展的 Dataframes 是基于 numpy 构建的,因此您无需选择它们存储的特定类型。您最好的选择是使用to_dict,然后将其用作穷人数据框。为什么要这样做?

【讨论】:

    【解决方案2】:

    pandas(或numpy)的“Native Python type”是一个对象。这就是它的程度。 Pandas 只知道它是一个 Python 对象并采取相应的行动。除此之外,您不能有字符串、unicode、整数等类型的列。

    不过,您可以拥有对象列并在其中存储您想要的任何内容。在此阶段,Pandas 将为您处理大部分转换。

    df = pd.DataFrame({'A': [1, 2], 
                       'B': [1., 2.], 
                       'C': [1 + 2j, 3 + 4j], 
                       'D': [True, False], 
                       'E': ['a', 'b'], 
                       'F': [b'a', b'b']})
    
    df.dtypes
    Out[71]: 
    A         int64
    B       float64
    C    complex128
    D          bool
    E        object
    F        object
    dtype: object
    
    for col in df:
        print(type(df.loc[0, col]))
    
    <class 'numpy.int64'>
    <class 'numpy.float64'>
    <class 'numpy.complex128'>
    <class 'numpy.bool_'>
    <class 'str'>
    <class 'bytes'>
    

    df = df.astype('object')
    
    for col in df:
        print(type(df.loc[0, col]))
    
    <class 'int'>
    <class 'float'>
    <class 'complex'>
    <class 'bool'>
    <class 'str'>
    <class 'bytes'>
    

    【讨论】:

      【解决方案3】:

      使用 numpy 列表

      (getattr(x, "tolist", lambda: x)() for x in df)
      

      https://numpy.org/doc/stable/reference/generated/numpy.ndarray.tolist.html

      【讨论】:

        猜你喜欢
        • 2017-02-03
        • 2014-08-19
        • 2019-10-31
        • 2019-10-11
        • 2020-06-17
        • 2018-05-02
        • 2021-10-15
        • 1970-01-01
        • 2021-09-27
        相关资源
        最近更新 更多