pandas.DataFrame.replace 更改列的 dtype

Chr*_*ris 5 python pandas

所以我试图用np.nan我的数据框中的值替换None并注意到在这个过程中数据框中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)
Run Code Online (Sandbox Code Playgroud)

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

Grz*_*ski 0

当您替换每列并从而不是replace从.pd.Series(...)pd.DataFrame(...)

除了,正如评论中提到的,NoneType()不能转换为 float (或 int,或任何数字 - 您宁愿使用NaN),因此它将自动转换为object.

import pandas as pd
import numpy as np
data = pd.DataFrame({'A':np.nan,'B':1.096, 'C':1}, index=[0])
print(data)
print(data.dtypes)
for col in data.columns:
    data[col].replace(to_replace={np.nan: None}, inplace=True)
print(data)
print(data.dtypes)
Run Code Online (Sandbox Code Playgroud)

输出:

      A      B  C
0 NaN  1.096  1

A    float64
B    float64
C      int64
dtype: object
      A      B  C
0  None  1.096  1

A     object
B    float64
C      int64
dtype: object
Run Code Online (Sandbox Code Playgroud)