python - pandas.DataFrame.replace 更改列的 dtype

标签 python pandas

因此,我尝试用 None 替换数据框中的 np.nan 值,并注意到在此过程中 float 的数据类型数据框中的列更改为 object,即使它们不包含任何丢失的数据。

举个例子:

import pandas as pd
import numpy as np
data = pd.DataFrame({'A':np.nan,'B':1.096, 'C':1}, index=[0])
data.replace(to_replace={np.nan:None}, inplace=True)

在调用 replace 之前和之后调用 data.dtypes 显示 B 列的数据类型从 float 更改为 object,而 C 的数据类型保持 int。 如果我从原始数据中删除 A 列,则不会发生这种情况。 我想知道为什么会发生这种变化以及如何避免这种影响。

最佳答案

我已经遇到过很多次了,并且已经解决了。在使用 astype(object) 替换之前,它将保留 dtypes。我不得不使用它来解决合并问题、合并问题等。我不确定为什么它会在以这种方式使用时保留类型,但它确实如此,并且一旦您发现它就会很有用。

data.info()    

#<class 'pandas.core.frame.DataFrame'>
#Int64Index: 1 entries, 0 to 0
#Data columns (total 3 columns):
#A    0 non-null float64
#B    1 non-null float64
#C    1 non-null int64
#dtypes: float64(2), int64(1)
#memory usage: 32.0 bytes

import pandas as pd 
import numpy as np 
data = pd.DataFrame({'A':np.nan,'B':1.096, 'C':1}, index=[0]) 
data.replace(to_replace={np.nan:None}, inplace=True)                                                                                                                                 

data.info()   

#<class 'pandas.core.frame.DataFrame'>
#Int64Index: 1 entries, 0 to 0
#Data columns (total 3 columns):
#A    0 non-null object
#B    1 non-null object
#C    1 non-null int64
#dtypes: int64(1), object(2)
#memory usage: 32.0+ bytes

import pandas as pd 
import numpy as np 
data = pd.DataFrame({'A':np.nan,'B':1.096, 'C':1}, index=[0]) 
data.astype(object).replace(to_replace={np.nan:None}, inplace=True)                                                                                                                  

data.info()                                                                                                                                                                          

#<class 'pandas.core.frame.DataFrame'>
#Int64Index: 1 entries, 0 to 0
#Data columns (total 3 columns):
#A    0 non-null float64
#B    1 non-null float64
#C    1 non-null int64
#dtypes: float64(2), int64(1)
#memory usage: 32.0 bytes

关于python - pandas.DataFrame.replace 更改列的 dtype,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59500812/

相关文章:

python - 将邮政编码 API 调用应用于数据框中的每一行

python - Django (1.9) makemigrations 在 bool 字段上没有得到 Blank=True

python - 使用 Matplotlib 创建箱线图

python - 如果 Pandas 中其他两列具有匹配的值,如何用另一个数据框的值填充空列值?

python - 为什么在 Python Flask 中使用类与装饰器?

python - 归档 Django 模型

python - 将包含 if 的函数应用于 pandas 中数据帧的每一行,无需 for 循环

python - 从 Pandas 数据框中获取最小和最大日期

python - Pandas:从多列中删除 NaN 并将它们转换为 int 的最佳方法

python - 交换图像时保持 QGraphicsView 中的 View /滚动位置