python - Pandas 分配回使用 notnull() 过滤的系列

标签 python pandas series

各位开发者大家好,

我目前正在学习 pandas,并且仍在努力思考如何分配值,例如,我将其转换为特定类型,返回原始数据框。

更具体地说,我有这个数据框:

     id         A       B
0   50000    12413     32885.0
1   50001     2040     43737.0
3   50002     2040     28015.0
4   50003     2040      NaN
5   50004     2040     28565.0

我的目标是将 B 列转换为整数,但保留 NaN 值不变,因此没有 fillna(0)。我想要这个:

     id         A       B
0   50000    12413     32885
1   50001     2040     43737
3   50002     2040     28015
4   50003     2040      NaN
5   50004     2040     28565

我用 print(df.loc[df['B'].notnull(), 'B'].astype('int')) 它奏效了。

        B
0   32885
1   43737
3   28015
4   28565

但是如果我尝试将它分配回数据框:

df.loc[df['B'].notnull(), 'B'] = df.loc[df['B'].notnull(), 'B'].astype('int')

我仍然得到原始的、未转换的数据。所以我似乎做错了作业,但我不知道如何正确地做。 非常感谢您的帮助!

最佳答案

对于 pandas,避免将 NaN 与整数组合

除非您有非常充分的理由,否则请避免这种做法。原因是 pandas 只允许对连续内存块中的数组进行矢量化计算。这仅适用于相同类型的数据,例如一系列 intfloatdatetime,但不是 object

NaN 被认为是 float 。因此,将整数与 NaN 组合会强制 pandas 默认将整个系列向上转换为 float。这会增加内存使用量,但对于大多数用例而言不是问题。

如果您希望将 NaN 与整数组合,您需要使用 dtype=object 创建一个系列,并让 pandas 使用一个一系列的指针。这在计算和内存密集型方面是昂贵的。除非绝对必要,否则不要这样做。

但如果您只是必须...

在将非 NaN 元素转换为整数之前,您可以将系列转换为 object:

df['B'] = df['B'].astype(object)

如上所述,您要求 pandas/numpy 为系列中的每个项目使用一个指针。您不妨开始使用列表。

关于python - Pandas 分配回使用 notnull() 过滤的系列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50603794/

相关文章:

python - opencv 在 osx 上安装没有合适的图像错误

python - pandas DataFrame 列表的逐元素平均值

python - pandas 从 B 系列中获得的条目也在 A 系列中;但仅在 A 系列中唯一的条目的填充值为 0

highcharts - 如何使用 highcharts 在工具提示中隐藏一个系列数据信息

javascript - 更改dimplejs linemarker样式

python - 保存图像分割中的各个片段

javascript - 尝试使用 Google Assistant 应用连接到服务器

python - 从 Numpy 数组 : How do I specify the index column and column headers? 创建 Pandas DataFrame

python - Pandas 数据框 : Split multiple columns each into two columns

python - 如何将BigQuery SQL查询结果转换为Spark DataFrame?