【问题标题】:Pandas DF: Formatting Hyphenated Last NamesPandas DF:格式化带连字符的姓氏
【发布时间】:2021-05-18 19:00:15
【问题描述】:

我正在构建一个 python 模块来帮助我为工作设置文本格式。我使用导入到我们公司的 CRM 中的应用程序和调查数据,因此我试图将“louis-dreyfus”之类的内容转换为“Louis-Dreyfus”,其中名称的开头和连字符后都是大写的。当我在导入数据集的同一个 jupyter 笔记本中写出函数时,我的代码有效,但是当我在模块中写出函数并导入它时,“louis-dreyfus”变成“Louis-dreyfus”。到目前为止,这是我的代码:

def format_names(df_name, col_name):
    for idx, val in enumerate(df_name[col_name]):
        val = val.strip()
        if '-' in val:
            split = val.split('-')
            n1 = split[0].strip()
            n2 = split[1].strip()
            n1 = n1.capitalize()
            n2 = n2.capitalize()
            hyphen_names = n1 + '-' + n2 
            df_name[col_name].iloc[idx] = hyphen_names

如果我在“if”语句的末尾打印出 df_name[col_name].iloc[idx],我会得到正确的输出“Louis-Dreyfus”,但它似乎不会替换数据框中的值。帮助!

【问题讨论】:

    标签: python pandas string format


    【解决方案1】:

    不知道效率,但不妨试试

    import pandas as pd
    from io import StringIO
    
    data = '''\
    id,name
    101,asdf-qwer
    102,justin
    103,foo-bar
    104,bar-foo
    105,was here
    '''
    
    f = StringIO(data)
    df = pd.read_csv(f)
    
    print(df)
    
    df['name'] = df['name'].str.title()
    
    print(df)
    

    【讨论】:

      【解决方案2】:

      你可以试试这个:

      样本数据:

      import pandas as pd
      df = pd.DataFrame({'names':[" louis-dreyfus ", "some-name    ", "    another-more-complex-name   "]})
      

      代码:

      def format_names(s):
          return '-'.join([x.strip().capitalize() for x in s.split('-')])
      
      df['names'].map(format_names)
      

      结果:

      # Out[10]: 
      # 0                Louis-Dreyfus
      # 1                    Some-Name
      # 2    Another-More-Complex-Name
      # Name: names, dtype: object
      

      【讨论】:

      • 无需为此创建函数。你可以使用df['names'].map(str.title)
      • @GabrielMelodePaula 你说得对,谢谢你让我知道。我不知道 title() 也可以与连字符一起使用,在这种情况下,甚至应该可以这样做:df['names'].str.title()。另一方面,在他的函数中,kmm 在拆分后也会执行 .strip(),因此“ louis -dreyfus ”将是:“Louis-Dreyfus”,您无法单独使用 title() 来实现。
      • 我也没有,我只是在这里测试并弄清楚了哈哈哈,但是如果没有的话,那就太好了
      • 感谢@GabrielMelodePaula 缩短了代码。得到它的工作: df_name[col_name] = df_name[col_name].map(str.strip) df_name[col_name] = df_name[col_name].map(str.title)
      • @kmm 在这种情况下,您可以简单地使用df_name[col_name] = df_name[col_name].str.strip(),str.title() 来完成这两个操作,然后您可以考虑接受一个答案以帮助未来的读者。贾斯汀的答案可能是最接近的。
      猜你喜欢
      • 2013-01-07
      • 2015-12-27
      • 1970-01-01
      • 2016-08-09
      • 1970-01-01
      • 1970-01-01
      • 2016-02-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多