2016-01-05 4 views
1

Учитывая этот кадр данных:Используйте string.capwords с пандами колонке

df = pd.DataFrame(
     {'A' : ['''And's one''', 'And two', 'and Three'], 
     'B' : ['A', 'B', 'A']}) 
df 

    A   B 
0 And's one A 
1 And two  B 
2 and Three A 

Я пытаюсь заглавной буквы только (без заглавной «с» в «А-х»).

Желаемый результат заключается в следующем:

A   B 
0 And's One A 
1 And Two  B 
2 And Three A 

Беда в том, когда я делаю это:

import string  
df['A']=string.capwords(df['A']) 

я получаю эту ошибку:

--------------------------------------------------------------------------- 
AttributeError       Traceback (most recent call last) 
<ipython-input-106-d429a8e7cc45> in <module>() 
----> 1 df['A']=string.capwords(df['A']) 

C:\Users\zvsy0717\AppData\Local\Continuum\Anaconda3\lib\string.py in capwords(s, sep) 
    42 
    43  """ 
---> 44  return (sep or ' ').join(x.capitalize() for x in s.split(sep)) 
    45 
    46 

C:\Users\zvsy0717\AppData\Local\Continuum\Anaconda3\lib\site-packages\pandas\core\generic.py in __getattr__(self, name) 
    2244     return self[name] 
    2245    raise AttributeError("'%s' object has no attribute '%s'" % 
-> 2246         (type(self).__name__, name)) 
    2247 
    2248  def __setattr__(self, name, value): 

AttributeError: 'Series' object has no attribute 'split' 

Заранее спасибо !

ответ

2

Вы можете использовать лямбда vectorised str.split и затем apply и присоединиться:

In [132]: 
df['A'].str.split().apply(lambda x: [el.capitalize() for el in x]).str.join(' ') 

Out[132]: 
0 And's One 
1  And Two 
2 And Three 
dtype: object 

apply или вызвать и использовать лямбда с string.capwords:

In [136]: 
import string 
df['A'] = df['A'].apply(lambda x: string.capwords(x)) 
df 

Out[136]: 
      A B 
0 And's One A 
1 And Two B 
2 And Three A 
+0

Спасибо! Что, если бы я имел значение: «MICHIGAN-Ohio», и я хотел, чтобы он сказал «Мичиган-Огайо»? –

+1

Вы можете использовать мой первый ответ, но разделить на '-' и перезаписать, но вам нужно будет замаскировать строки, содержащие первый дефис – EdChum