Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.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中解析复杂的季节和情节格式_Python_Regex_Parsing_Pandas_Unicode - Fatal编程技术网

如何在Python中解析复杂的季节和情节格式

如何在Python中解析复杂的季节和情节格式,python,regex,parsing,pandas,unicode,Python,Regex,Parsing,Pandas,Unicode,我正在尝试清理一些数据,并且在Python/Pandas中很难做到这一点。我有一系列电视节目标题的数据。我想做以下工作: 检查字符串末尾是否有整数 如果只有一个整数,则返回字符串该部分之前的所有内容 如果字符串中有多个部分是整数,则返回字符串的第一个全部,然后返回第一个整数 以下是我的意见: Brooklyn 99 103 Hit The Floor 110 产出: Brooklyn 99 Hit The Floor 作为一个单独的函数(或多个函数),我想删除任何附加的季节/剧集格式和其后的

我正在尝试清理一些数据,并且在Python/Pandas中很难做到这一点。我有一系列电视节目标题的数据。我想做以下工作:

  • 检查字符串末尾是否有整数
  • 如果只有一个整数,则返回字符串该部分之前的所有内容
  • 如果字符串中有多个部分是整数,则返回字符串的第一个全部,然后返回第一个整数
  • 以下是我的意见:

    Brooklyn 99 103
    Hit The Floor 110
    
    产出:

    Brooklyn 99
    Hit The Floor
    
    作为一个单独的函数(或多个函数),我想删除任何附加的季节/剧集格式和其后的任何字符串:

    投入

    Hot in Cleveland s6 ep03
    Mutt & Stuff #111
    LHH ATL 08/31a HD
    LHH ATL 04/04 Check
    Esther With Hot Chicks Ep. 1
    Suspect 2/24
    Suspect 2/24 HD
    
    输出

    Hot in Cleveland
    Mutt & Stuff
    LHH ATL
    LHH ATL
    Esther With Hot Chicks
    Suspect
    Suspect
    
    我编写了这样一个函数:

    def digit(value):
        return value.isdigit()
    
    
    def another(value):
        li = value.split(" ")
        x = len(filter(digit, value))
        ind = li.index( str(filter(digit, li)[0]) ) 
        try: 
            if x > 1:
                return " ".join(li[:ind+1])
            else: 
                value.str.replace(r'(\D+).*', r'\1').str.replace(r'\s+.$', '').str.strip()
        except:
            return value.str.replace(r'(\D+).*', r'\1').str.replace(r'\s+.$', '').str.strip()
    
    data["LongTitleAdjusted"] = data["Long Title"].apply(another)
    data["LongTitleAdjusted"]
    
    但我得到了这个错误:

    AttributeError                            Traceback (most recent call last)
    <ipython-input-49-3526b96a8f5a> in <module>()
         15         return value.str.replace(r'(\D+).*',      r'\1').str.replace(r'\s+.$', '').str.strip()
         16 
    --->     17 data["LongTitleAdjusted"] = data["Long Title"].apply(another)
             18 data["LongTitleAdjusted"]
    
    C:\Users\lehmank\AppData\Local\Continuum\Anaconda2\lib\site-     packages\pandas\core\series.pyc in apply(self, func, convert_dtype, args,   **kwds)
       2167             values = lib.map_infer(values, lib.Timestamp)
       2168 
    -> 2169         mapped = lib.map_infer(values, f, convert=convert_dtype)
       2170         if len(mapped) and isinstance(mapped[0], Series):
       2171             from pandas.core.frame import DataFrame
    
    pandas\src\inference.pyx in pandas.lib.map_infer (pandas\lib.c:62578)()
    
    <ipython-input-49-3526b96a8f5a> in another(value)
         13             value.str.replace(r'(\D+).*',    r'\1').str.replace(r'\s+.$', '').str.strip()
         14     except:
    ---> 15         return value.str.replace(r'(\D+).*',    r'\1').str.replace(r'\s+.$', '').str.strip()
         16 
          17 data["LongTitleAdjusted"] = data["Long Title"].apply(another)
    
    AttributeError: 'unicode' object has no attribute 'str'
    
    AttributeError回溯(最近一次调用)
    在()
    15返回值.str.replace(r'(\D+).*',r'\1').str.replace(r'\s+.$','').str.strip()
    16
    --->17数据[“长标题调整”]=数据[“长标题”]。应用(另一个)
    18数据[“LongTitleAdjusted”]
    C:\Users\lehmank\AppData\Local\Continuum\Anaconda2\lib\site-packages\pandas\core\series.pyc在应用中(self、func、convert\u dtype、args、**kwds)
    2167 values=lib.map\u推断(值,lib.Timestamp)
    2168
    ->2169 mapped=lib.map\u推断(值,f,convert=convert\u数据类型)
    2170如果len(映射)和isinstance(映射[0],系列):
    2171从pandas.core.frame导入数据帧
    pandas.lib.map\u expert(pandas\lib.c:62578)()中的pandas\src\expression.pyx
    在另一个(值)
    13 value.str.replace(r'(\D+).*',r'\1').str.replace(r'\s+.$','').str.strip()
    14除:
    --->15返回值.str.replace(r'(\D+).*',r'\1').str.replace(r'\s+.$','').str.strip()
    16
    17数据[“长标题调整”]=数据[“长标题”]。应用(另一个)
    AttributeError:“unicode”对象没有属性“str”
    

    对于regex

    这将对您的示例数据集起到作用:

    df['title'].str.replace(r'(\D+).*', r'\1').str.replace(r'\s+.$', '').str.strip()
    

    但是它也会将布鲁克林99转换为布鲁克林,有没有办法检查格式末尾是否有多个int并保留第一个int?@KateLehman,我刚刚在你的问题中添加了
    regex
    标记-希望一些regex专家能够解决这个问题。我想我可以做一些类似if语句的事情,检查字符串中是否有多个int,然后只返回前面的字符串,然后使用你的regex作为else…我找到了一个函数来解决我遇到的问题上面提到过,但是我在regex AttributeError上遇到了一个错误:“unicode”对象没有属性“str”,您知道如何修复这个问题吗?请包含完整的回溯。它会告诉您(和我们)错误发生的位置。感谢您的帮助@skrrgwasmeAre您使用pandas只是为了过滤数据吗?@padraiccnningham correct我正在使用pandas过滤数据,以获得字符串值中的整数数