Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在包含'的列中;X';,检查并删除包含';Y';_Python_Pandas - Fatal编程技术网

Python 在包含'的列中;X';,检查并删除包含';Y';

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

假设我想删除标题为“X”的列中任何单元格包含单词“acme”的行。我目前的想法是添加一个for循环(对于包含X的列标题),然后使用先前定义的掩码删除“acme”行。有更好的办法吗

另外,如果您能在掩码/查询方面提供帮助,我将不胜感激,因为我从未使用过它们

输入DF:

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文件之外的所有文件中的许多重复列