我正在构建一个 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”,但它似乎没有替换数据帧中的值。帮助!
答案 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)