Pandas DF:格式化带连字符的姓氏

时间:2021-05-18 19:00:15

标签: python pandas string format

我正在构建一个 python 模块来帮助我格式化工作文本。我使用导入到我们公司 CRM 中的应用程序和调查数据,因此我试图将诸如“louis-dreyfus”之类的内容转换为“Louis-Dreyfus”,其中名称在连字符的开头和后面大写。当我在导入数据集的同一个 jupyter notebook 中写出函数时,我的代码可以工作,但是当我在模块中写出函数并导入它时,“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”,但它似乎没有替换数据帧中的值。帮助!

2 个答案:

答案 0 :(得分:1)

你可以试试这个:

示例数据:

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

答案 1 :(得分: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)
相关问题