【问题标题】:True values become 1 when a value in pandas column is changing to nan当 pandas 列中的值更改为 nan 时,真值变为 1
【发布时间】:2021-09-29 15:45:45
【问题描述】:

我有一个类似于以下示例的数据框,其中一列包含 True 或 Nan:

df = pd.DataFrame({'Data': [1, 2, 3, 4, 5], 'T/F':[True, True, True, True, True]})

Data   T/F
0     1  True
1     2  True
2     3  True
3     4  True
4     5  True

我想尝试从该数据帧的最后一行中删除真值,但是当我这样做时,所有其他真值都变为 1:

df.loc[df.last_valid_index(), 'T/F'] = np.nan

   Data  T/F
0     1  1.0
1     2  1.0
2     3  1.0
3     4  1.0
4     5  NaN

我想知道是否有人知道为什么会发生这种情况?有什么办法可以阻止它?我想我可能需要更改我的代码以使用 False 而不是 nan。

【问题讨论】:

  • True 在我的安装中运行df.loc[df.last_valid_index(), 'T/F'] = np.nan 后仍为True。我的版本是最新版本1.3.0。

标签: python pandas boolean


【解决方案1】:

您可以改用pd.NA

df.loc[df.last_valid_index(), 'T/F'] = pd.NA

df的输出:

    Data    T/F
0   1       True
1   2       True
2   3       True
3   4       True
4   5       <NA>

注意:由于np.nan的类型是float,所以它为什么将布尔值True转换为1.0和布尔值False转换为0.0

另外pd.NA保留数据类型,您可以通过以下方式检查:

print(df['T/F'].map(type))

#output of above code:

0                           <class 'bool'>
1                           <class 'bool'>
2                           <class 'bool'>
3                           <class 'bool'>
4    <class 'pandas._libs.missing.NAType'>
Name: T/F, dtype: object

【讨论】:

  • dtype 现在是什么?对象?
  • @Umar.H 它是 boolpd.NA 它是 'pandas._libs.missing.NAType'
  • 这是完美的,谢谢 :) 我会尽快接受
  • @EmiOB 你可以使用pd.isna()pd.isnull()df.isna()df.isnull()
  • @EmiOB 更新的答案添加了一个 liitle ,更多信息....请看一下 :)
【解决方案2】:

一列,一种类型,当你设置值np.nan时,程序会将此列转换为浮点数。在我的记忆中,df.astype() 函数只是处理列,而不是 ceil。

【讨论】:

    【解决方案3】:

    这是因为T/F 列包含bool 数据并且您尝试分配的值是numpy.float64 类型,因此该列被强制转换为最高相互dtype,即numpy.float64 在这种情况下。

    如果您想在此列中包含混合值,即boolnumpy.float64,则应在更新之前将此列转换为object,如下所示:

    import pandas as pd
    import numpy as np
    
    df = pd.DataFrame({'Data': [1, 2, 3, 4, 5], 'T/F':[True, True, True, True, True]})
    df['T/F'] = df['T/F'].astype('object')
    df.loc[df.last_valid_index(), 'T/F'] = np.nan
    df
    

    输出:

        Data    T/F
    0   1   True
    1   2   True
    2   3   True
    3   4   True
    4   5   NaN
    

    注意: 在 pandas.DataFrames 中保存混合值通常不是一个好习惯,因为它会大大降低性能,因此应尽可能避免。

    干杯

    【讨论】:

      猜你喜欢
      • 2018-11-26
      • 1970-01-01
      • 2022-07-07
      • 1970-01-01
      • 2023-01-10
      • 1970-01-01
      • 2020-10-22
      • 2022-12-09
      • 1970-01-01
      相关资源
      最近更新 更多