【问题标题】:find the field names from a search query从搜索查询中查找字段名称
【发布时间】:2016-02-13 12:53:51
【问题描述】:

我有一个 where 条件查询。我想用 where 条件内的这些字段创建一个数据框。 问题是如何从 where 条件中提取这些字段。

我尝试使用 rstrip、lstrip 在任何运算符(如 ==、>=、&、/)之前查找字符串。但仍然没有成功。我确实相信一些字符串搜索方法会做到这一点,但我没有得到它。 我的where条件是

whereFields == "CITY_NAME == 'city1' & EVENT_GENRE == 'KIDS' & count_EVENT_GENRE >= 1$#$FAV_VENUE_CITY_NAME == 'city1' & EVENT_GENRE == 'FANTASY' & count_EVENT_GENRE >= 1$#$CITY_NAME == 'city1' & EVENT_GENRE == 'FESTIVAL' & count_EVENT_GENRE >= 1$#$CITY_NAME == 'city1' & EVENT_GENRE == 'WORKSHOP' & count_EVENT_GENRE >= 1$#$CITY_NAME == 'city1' & EVENT_GENRE == 'EXHIBITION' & count_EVENT_GENRE >= 1$#$CITY_NAME == 'city1' & FAV_GENRE == '|DRAMA|'$#$CITY_NAME == 'city1' &  & FAV_GENRE == '|ACTION|ADVENTURE|SCI-FI"

我想要涉及的字段名称。就像我的数据框应该有所有唯一的列。 任何帮助将不胜感激。

【问题讨论】:

    标签: python arrays string pandas dataframe


    【解决方案1】:
    import re    
    res = [re.split(r'[(==)(>=)]', x)[0].strip() for x in re.split('[&($#$)]', whereFields)]
    

    似乎有效。现在您可能想要唯一的,并且没有空白字段:

    res = [x for x in list(set(res)) if x]
    

    【讨论】:

    • 但它读取了除第一个字段名称 city_name 之外的每个字段名称的重复项。这怎么可能。如果它是为获取唯一或非重复字段而编写的。那么它应该适用于所有字段,而不仅仅是第一个字段。顺便说一句,帮助很大。但是我可以稍后删除重复的,但如果单行就可以,我会很高兴。
    • 哦,在某些地方你有奇怪的$#$ 而不是&。我编辑了代码。
    • 除此之外,我不明白您在评论中的意思。带有list(set()) 的第二行去掉了重复项。
    • 谢谢它的工作,但我想要你的单个代码行中的唯一值 res = [re.split(r'[(==)(>=)]', x)[0] .strip() for x in re.split('[&($#$)]', whereFields)] 如果此代码可以获取字段,那么为什么不是唯一的。这样就不需要编写额外的代码行来消除重复。
    • 你能帮我用该列表输出值中的字段名称创建一个数据框吗。谢谢你今天节省了我 1 小时的时间。
    【解决方案2】:
    In [98]:
    pd.DataFrame(data = pd.Series(re.findall('\w+ *(?==|<|>)' , whereFields)).unique() , columns = ['fields'])
    Out[98]:
        fields
    0   CITY_NAME
    1   EVENT_GENRE
    2   count_EVENT_GENRE
    3   FAV_VENUE_CITY_NAME
    4   FAV_GENRE
    

    【讨论】:

    • 差不多。 count_EVENT_GENRE 不见了。
    • 感谢 Nader,但实际上我想使用 reg 函数来做到这一点,你只是教了我一个额外的方法和一个 numpy 函数谢谢。
    • 感谢@muraveill 的评论,我已经更新了我的答案
    猜你喜欢
    • 1970-01-01
    • 2014-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多