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

因此,我试图用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)

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

参考方案

当您替换每列并从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)

输出:

      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

Python:如何根据另一列元素明智地查找一列中的空单元格计数? - python

df = pd.DataFrame({'user': ['Bob', 'Jane', 'Alice','Jane', 'Alice','Bob', 'Alice'], 'income…

如何不按值而是按值范围合并两个数据框? - python

数据框A:pd.Dataframe({ 'price': [50, 150, 250], 'group':[2, 5, 10] }) 数据框B:pd.Dataframe({ 'low_price': [0, 100, 200], 'high_price': [99, 199, 2…

如何在一个热编码的熊猫数据框中找到列的正索引? - python

我有一个热编码的熊猫数据框,其形式为:df A B C D ID #1 2 1 0 1 #2 1 0 0 1 #3 1 1 1 0 df = pd.DataFrame({'ID_1':['#1','#1','#3','#1'], 'ID_2'…

Python-Excel导出 - python

我有以下代码:import pandas as pd import requests from bs4 import BeautifulSoup res = requests.get("https://www.bankier.pl/gielda/notowania/akcje") soup = BeautifulSoup(res.cont…

熊猫根据另一个数据框将多个列和行值设置为nan - python

我有两个大型数据框,df1:Col1 Col2 Val1 Val2 Val3 asd ASYL 4.2 4.2 ppq CONE 35 35 DA HU 100 100 而df2是Col1 Col2 Val1 Val2 Val3 asd ASYL 7 12 17 ppq CONE 17 19 19 DA HU 5 14 13 两个数据框具有相同的索引列Col…