【问题标题】:Remove everything before a delimiter when not all cells contain that delimiter当并非所有单元格都包含分隔符时,删除分隔符之前的所有内容
【发布时间】:2018-03-14 21:45:00
【问题描述】:

我有一个带有“时区”列的数据框。一些条目被列为“国家/城市”。我希望他们只是“城市”。在 stackoverflow 上有类似的问题,我从中提出了以下问题。

df['timezone'] = df['timezone'].str.split('/').str[1]

但是,这删除了没有“/”的条目。所以我尝试了各种其他的修改,但都无法正常工作。

接下来我尝试构造一个lambda函数并使用map,做了下面的各种改编,这也没有用。

df['timezone'] = df['timezone'].map(lambda x: x.split('/').str[1]) 

#AttributeError: 'list' object has no attribute 'str'

最后,我决定在下面写一个循环。 Python 花了一些时间来解决它,我充满希望,但最终似乎什么也没发生。

x = df['timezone']

for entry in x.items() :
    if x.str.contains('/') is True:
        x.str.split('/').str[1] 
        update(x) 
    else:
        pass

非常感谢任何帮助或建议,谢谢。

【问题讨论】:

    标签: python pandas dataframe split delimiter


    【解决方案1】:

    将拆分次数限制为1(当分隔符可能出现多次时需要),然后使用str[-1]而不是str[1]

    df   
           timezone
    0  country/city
    1           foo
    2           bar
    
    df['timezone'] = df['timezone'].str.split('/', n=1).str[-1]
    df
    
      timezone
    0     city
    1      foo
    2      bar
    

    str[-1] 充分处理那些没有什么可拆分的情况。

    【讨论】:

    • 感谢@COLDSPEED 非常感谢。哈哈,其中一个 OMG 时刻,当我只需要一个减号时,所有额外的(尝试的)问题解决!它甚至可以在没有 n=1 的情况下工作。干杯
    猜你喜欢
    • 1970-01-01
    • 2019-10-11
    • 1970-01-01
    • 1970-01-01
    • 2017-04-03
    • 2017-03-20
    • 1970-01-01
    • 2016-01-08
    相关资源
    最近更新 更多