我试图将我的数据帧分成两个基于medical_plan_id
的帧。如果为空,则放入df1
。如果不是空的到df2
。在
df1 = df_with_medicalplanid[df_with_medicalplanid['medical_plan_id'] == ""]
df2 = df_with_medicalplanid[df_with_medicalplanid['medical_plan_id'] is not ""]
下面的代码可以工作,但是如果没有空字段,我的代码将引发TypeError("invalid type comparison")
。在
如何处理这种情况?在
我的df_with_medicalplanid如下所示:
wellthie_issuer_identifier ... medical_plan_id
0 UHC99806 ... None
1 UHC99806 ... None
另一个变体是解压缩
df.groupby
,它返回一个带有元组的迭代器(第一项是groupby的元素,第二项是dataframe)。在比如这样:
_
在Python中用于标记不感兴趣的变量。为了便于阅读,我把代码分成两行。在完整示例
^{pr2}$退货:
使用
==
,而不是is
,来测试等式同样,用
!=
代替is not
来表示不等式。在is
在Python中有特殊的含义。如果两个变量指向同一个对象,则返回True
,而==
则检查变量所引用的对象是否相等。另请参见Is there a difference between ^{不要重复掩码计算
您正在创建的布尔掩码是逻辑中最昂贵的部分。这也是一个逻辑,你想避免手动重复,因为你的第一个和第二个掩模是相反的。因此,您可以使用bitwise inverse} 访问,来否定现有的掩码。在
~
(“tilde”),也可以通过^{空字符串与空值不同
相等与空字符串可以通过} 。这是因为空值是在NumPy数组中表示的,Pandas使用这些数组,
== ''
进行测试,但是相等与空值需要一个特殊的方法:^{np.nan
,np.nan != np.nan
by design。在如果要用空值替换空字符串,可以执行以下操作:
从概念上讲,丢失的值应该是null(
^{pr2}$np.nan
),而不是空字符串。但与上述过程相反,也可以将空值转换为空字符串:如果差异很重要,您需要了解数据并应用适当的逻辑。在
半成品溶液
假设您确实有空值,请计算单个布尔掩码及其逆值:
最终解决方案:避免额外变量
作为一个程序员,你应该避免创建额外的变量。在这种情况下,不需要创建两个新变量,您可以使用}(
GroupBy
和dict
来给出一个数据帧字典,其中False
(== 0
)和{== 1
)键对应的数据帧字典:则}(另请参见this related answer)。作为上述方法的变体,您可以放弃字典构造,使用Pandas
dfs[0]
表示df2
,dfs[1]
表示{GroupBy
方法:示例
将上述各项付诸行动:
相关问题 更多 >
编程相关推荐