python - 熊猫分配回一个用 notnull() 过滤的系列
问题描述
各位开发者您好,
我目前正在学习 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
原样,所以 no 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
只允许使用连续内存块中的数组进行矢量化计算。这仅适用于相同类型的数据,例如一系列类型int
, float
, datetime
,但不是 object
。
NaN
被认为是float
。因此,将整数与NaN
力相结合pandas
,默认情况下,将整个系列向上转换为float
. 这会增加内存使用量,但对于大多数用例而言,这不是问题。
如果您希望NaN
与整数结合,您需要使用 来创建一个系列dtype=object
,并pandas
使用一系列指针。这是昂贵的计算和内存密集型。除非绝对必须,否则不要这样做。
但如果你只是必须...
您可以object
在将非NaN
元素转换为整数之前将系列转换为:
df['B'] = df['B'].astype(object)
如上所述,您要求pandas
/numpy
为您的系列中的每个项目使用一个指针。您不妨开始使用列表。
推荐阅读
- c++ - C++ & Esp8266 LoadStoreAlignmentCause 与指针
- azure - Ontotext GraphDb 多租户和云托管查询
- r - R中lda的vcov
- python - 如果使用 python requests.Session() 不可用,则绕过代理
- javascript - 当要选择的元素不连续时,从数组中提取元素的选择
- r - 将 predict() 的答案输出到数据帧
- java - 使用 kotlin 的 kapt 和 maven 插件进行增量注释处理
- powershell - 使用托管服务帐户到 Exchange 的远程 Powershell 连接
- json - System.Text.Json.JsonException:'检测到不支持的可能对象循环
- android - 房间数据库 预打包的数据库的架构无效