我有一个数据框,其列数据类型需要映射到 python 原生数据类型。
我希望能够从 numpy 获取字典并将每一列转换为它的 native 类型。
例如:
{numpy.object_: object,
numpy.bool_: bool,
numpy.string_: str,
numpy.unicode_: unicode,
numpy.int64: int,
numpy.float64: float,
numpy.complex128: complex}
我尝试了 astype
和 pd.to_numeric
,都没有充分向下转换该列。
df['source'] = df['source'].astype(int)
返回 int32
,pd.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/