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

我希望能够从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)int32一样返回pd.to_numeric
更新:

大多数评论质疑这样做的智慧。 networkx读取dataframes并接受np datatypes。但是,由于存在以下已记录的错误,因此无法使用json_dumps编写图形:TypeError: Object of type 'int64' is not JSON serializable
谢谢

最佳答案

Pandas (或numpy)的“本地Python类型”是一个对象。就是这样。 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 DataFrame列转换为原生python数据类型?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47423930/

10-12 22:31
查看更多