Python 在包含'的列中;X';,检查并删除包含';Y';
假设我想删除标题为“X”的列中任何单元格包含单词“acme”的行。我目前的想法是添加一个for循环(对于包含X的列标题),然后使用先前定义的掩码删除“acme”行。有更好的办法吗 另外,如果您能在掩码/查询方面提供帮助,我将不胜感激,因为我从未使用过它们 输入DF:Python 在包含'的列中;X';,检查并删除包含';Y';,python,pandas,Python,Pandas,假设我想删除标题为“X”的列中任何单元格包含单词“acme”的行。我目前的想法是添加一个for循环(对于包含X的列标题),然后使用先前定义的掩码删除“acme”行。有更好的办法吗 另外,如果您能在掩码/查询方面提供帮助,我将不胜感激,因为我从未使用过它们 输入DF: Company_x First Name Last Name Emails_x Created_x Hosted Meetings 03112016 Facilitated Meetings_x Atte
Company_x First Name Last Name Emails_x Created_x Hosted Meetings 03112016 Facilitated Meetings_x Attended Meetings_x Company_y Emails_y ... Created_x Hosted Meetings 04122016 Facilitated Meetings_x Attended Meetings_x Company_y Emails_y Created_y Hosted Meetings 04212016 Facilitated Meetings_y Attended Meetings_y
0 TS X Y X@Y.com 03/10/2016 0.0 0.0 0.0 TS X@Y.com ... 03/10/2016 0.0 0.0 2.0 NaN NaN NaN NaN NaN NaN
1 TS X Y X@Y.com 03/10/2016 0.0 0.0 0.0 TS X@Y.com ... 01/25/2016 0.0 0.0 0.0 NaN NaN NaN NaN NaN NaN
2 TS X Y X@Y.com 03/10/2016 0.0 0.0 0.0 TS X@Y.com ... 04/06/2015 9.0 10.0 17.0 NaN NaN NaN NaN NaN NaN
ValueError:无法使用从重复轴重新索引
所有\u用户\u工作表\u主机.filter(如class='Company')尝试以下操作:
import pandas as pd
df = pd.DataFrame([[11,'acme'],[22,'samme'],[33,'mamme']],columns=('SI','X'))
bool_arr = ~df.X.str.contains('acme')
df1 = df[bool_arr]
print df1
现在,您可以使用df1执行保存/其他操作。您可以这样做:
In [150]: df
Out[150]:
A AXA X ZXZ ZZNX
0 acme axa pacme aaa 1
1 meca A BZZZ ccc 2
2 YYY a c me 3
3 000 macme 111 2222 4
In [151]: df[(df.filter(like='X').astype(str).apply(lambda x: x.str.contains('acme')))
.....: .sum(axis=1)==0
.....: ]
Out[151]:
A AXA X ZXZ ZZNX
1 meca A BZZZ ccc 2
2 YYY a c me 3
说明:
使用filter()
我们可以筛选包含X
的列:
In [152]: df.filter(like='X')
Out[152]:
AXA X ZXZ ZZNX
0 axa pacme aaa 1
1 A BZZZ ccc 2
2 a c me 3
3 macme 111 2222 4
使用apply()
函数逐列搜索包含acme
的单元格
In [153]: df.filter(like='X').astype(str).apply(lambda x: x.str.contains('acme'))
Out[153]:
AXA X ZXZ ZZNX
0 False True False False
1 False False False False
2 False False False False
3 True False False False
在Python中:True==1
,False==0
,因此对每行中的单元格进行求和sum(axis=1)
将为至少一个单元格包含搜索词的行提供1
,而在其他位置:
In [154]: (df.filter(like='X').astype(str).apply(lambda x: x.str.contains('acme'))).sum(axis=1)
Out[154]:
0 1
1 0
2 0
3 1
dtype: int64
我得到“ValueError:无法从重复轴重新编制索引”,因为过滤器…@FredericBastiat,你能发布一个数据集来帮助复制你的错误吗?在这里发布评论有点乱。我将在您能够识别潜在问题的地方描述它。公司列在一行中的值都相同。许多行具有NaN值(可能也在“公司”列中)。许多公司列具有相同的名称(只有名为Company_y和Company_x的公司列)。还有许多其他(但不是所有)专栏的名称都类似(如meetings_x和meetings_y),在提问时总是尝试提供一个答案。如果是熊猫问题,请提供示例输入和输出数据集(CSV/dict/JSON/Python代码格式的5-7行作为文本,因此在为您编写答案时可以使用它)。这将有助于避免以下情况:
您的代码对我无效
或它对我的数据无效
,等等。谢谢。用dataframe的前三行编辑了我的问题,错误和它发生的位置你有很多重复的列(相同的列名)-你如何处理这个DF???很好。我寻找了一种不同的方法来处理事情,并提出了一个新问题,关于在for循环中删除excel文件中加载的最终文件中的NaN行,以及删除除最终加载的excel文件之外的所有文件中的许多重复列