熊猫使用Excel筛选器的方法

时间:2019-02-28 17:46:27

标签: python excel pandas

下面有一个我在excel文件上运行的示例脚本。基本上是之后 第6行,我想过滤掉F列中包含BFD和SFD的行(我知道刚刚在上面的代码中分配了这些值,而且还有更多这些值存在于脚本之前的不同行中)。过滤之后,只需将第7-8行中的逻辑应用于数据帧。因此,从根本上来说,您可以使用pandas按列中的单元格值过滤出行,然后对未过滤出的内容应用逻辑,然后仅对所有内容进行不过滤(就像您要在excel中清除过滤器一样),并准备好我的数据框< / p>

import pandas as pd
import numpy as np
data = pd.read_excel("2.27.xlsm", encoding = "ISO-8859-1", dtype=object)
data.loc[data.F == 'DBD', 'F'] = 'BFD'
data.loc[data.F == 'DUB', 'F'] = 'BFD'
data.loc[data.F == 'DCD', 'F'] = 'SFD'
#Now I want to apply this logic and filter out any rows that have values of BFD or SF in column F and then apply to logic below (to not overwrite any work done above)
data.loc[data.Fm == 'B25', 'F'] = 'BFD'
data.loc[data.Fm == 'B50', 'F'] = 'BFD'

writer = pd.ExcelWriter('output.xlsx', engine='xlsxwriter')
data.to_excel(writer, sheet_name='Sheet1')
writer.save()

3 个答案:

答案 0 :(得分:0)

未经测试,因为没有给出任何数据,但这应该可以解决问题:

filtered = [d for d in data if d['F'] == 'BFD' or d['F'] == 'SF'] 
# now proceed with your work

答案 1 :(得分:0)

这会将您的数据数据帧转换为仅包含F列具有BDF或SDF的行的数据帧

data = data[data.F.str.contains(r'^BFD$|^SFD$', case = False, na=False)]

答案 2 :(得分:0)

再次感谢所有帮助,这就是我最终要做的。如果您认为这不等同于以UN进行调整然后清除过滤器开头的项目过滤的excel过滤器,请戳一下漏洞。

ta =  data[~data.Format.str.contains(r'UN', case = False, na=False, regex = False)] # trying regex
da = data[data.Format.str.contains(r'UN', case = False, na=False, regex = False)] # trying regex


final = pd.concat([ta, da],0) # now append seperate dataframes