【发布时间】:2021-09-08 13:18:55
【问题描述】:
我有一个庞大的数据框。数据框有列患者.药物。此列包含字典列表作为其元素。 我想过滤掉 patient.drug 列中所有包含“NIFEDIPINE”字样的行。
数据框非常大。这是它的一个示例。
patient.drug
0 [{'drugcharacterization': '1', 'medicinalproduct': 'PANDOL'}]
1 [{'drugcharacterization': '2', 'medicinalproduct': 'NIFEDIPINE'}]
2 [{'drugcharacterization': '3', 'medicinalproduct': 'SIMVASTATIN'}]
3 [{'drugcharacterization': '4', 'medicinalproduct': 'NIFEDIPINE'}]
到目前为止,我已经尝试过
df[df['patient.drug'].str.contains('NIFEDIPINE')]
但它给了我一个错误。
raise KeyError(f"None of [{key}] are in the [{axis_name}]")
KeyError: "None of [Float64Index([nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,\n ...\n nan, nan, nan, nan, nan, nan, nan, nan, nan, nan],\n dtype='float64', length=12000)] are in the [columns]"
我也尝试过使用in 运算符并遍历行。
lst=[]
for i in range(len(df)):
if 'NIFEDIPINE' in df.loc[i, "patirnt.drug"]:
lst.append(i)
print(lst)
这也给了我一个错误。 我应该怎么做才能让它正确?
【问题讨论】:
-
试试
if i in df.loc: -
df[df['patient.drug'].str.contains('NIFEDIPINE')]?? -
似乎您在
patient.drug列中有(很多)NaNs。所以请尝试df[df["patient.drug"].str.contains("NIFEDIPINE", na=False)],它会在返回值中说NaNs 是False,而不是它们自己,然后你可以希望安全地将其用作掩码。 -
您能否包含一个数据框的小样本?这将使您的问题和期望的输出更加清晰。
标签: python pandas dataframe data-science