python - 如何将 pandas 数据框列转换为 native python 数据类型?

标签 python python-3.x pandas numpy dataframe

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

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

例如:

{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 也是如此

更新:

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

谢谢

最佳答案

“ native Python 类型”对于 pandas(或 numpy)来说是一个对象。这就是它的范围。 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'>

关于python - 如何将 pandas 数据框列转换为 native python 数据类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47423930/

相关文章:

python - Django/MySQL 中的间隙检测

python - 使用一个函数更新不同的类属性

python-3.x - 如何根据另一个引用点调整图像大小

python - 来自字符串中定义的函数的 `inspect.getsource`? `s="def f() : return 5 "`

python - 从 Pandas 中的相关矩阵返回最高和最低相关

python - 如何遍历数据框字典中的行并更改一些值 - Pandas Python

python - Django ORM : filter related objects?

python - 在 python 文件中指定编码时,python 中的 "magic lines(s)"如何工作?

python - 附加具有不同维度的 numpy 数组

java - 根据坐标或tessaract提取图像数据并将内容写入docs/docx word文件