Python DataFrame – 删除具有属于值列表的列值的行
发布时间:2020-12-20 11:05:33 所属栏目:Python 来源:网络整理
导读:我正在寻找以下问题的解决方案. 有一个DataFrame: data = np.array([['','col1','col2'],['row1',1,2],['row2',3,4]])df = pd.DataFrame(data=data[1:,1:],index=data[1:,0],columns=data[0,1:]) 我希望保留行,例如,列col1中的值属于列表[1,而列col2中的值
我正在寻找以下问题的解决方案.
有一个DataFrame: data = np.array([['','col1','col2'],['row1',1,2],['row2',3,4]]) df = pd.DataFrame(data=data[1:,1:],index=data[1:,0],columns=data[0,1:]) 我希望保留行,例如,列col1中的值属于列表[1,而列col2中的值属于列表[2,4]. df1 = df[df['col1'].isin([1,2]) & df['col2'].isin([2,4])] 但是df1打印为Empty DataFrame. df1 = df[(df.col1 in [1,2]) & (df.col2 in [2,4])] 结果是 ValueError: The truth value of a Series is ambiguous. Use a.empty,`a.bool()`,`a.item()`,`a.any()` or `a.all()`. 期望在其中获得带有row1的DataFrame. 解决方法
您需要将数字系列转换为数字类型:
df = pd.DataFrame(data=data[1:,1:].astype(int),1:]) df1 = df[df['col1'].isin([1,4])] print(df1) col1 col2 row1 1 2 您的代码不起作用,因为您的初始数据数组是object类型,表示指向任意类型的指针. Pandas不会隐含地应用转换,因为在大多数情况下这会非常昂贵. 如果您已经构建了Pandas数据帧,则可以将数值转换应用为单独的步骤: df = df.astype(int) 或者,仅转换指定的系列: cols = ['col1','col2'] df[cols] = df[cols].apply(pd.to_numeric,errors='coerce') (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |