因此,我尝试用 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/