Series和Index内置了一系列的字符串处理方法,只需要访问str属性就可以调用这些方法。
这些方法最大的特点就是会自动忽略缺失值,只处理正常的字符串。
In [4]:
import pandas as pd
import numpy as np
In [5]:
s = pd.Series(['A', 'B', 'C', 'AaBa', 'Baca', np.nan, 'CABA', 'dog', 'cat'])
In [6]:
s.str.lower()
Out[6]:
In [7]:
s.str.upper()
Out[7]:
In [8]:
s.str.len()
Out[8]:
In [9]:
idx = pd.Index([' jack', 'jill ', ' jesse ', 'frank'])
In [10]:
idx.str.strip()
Out[10]:
In [11]:
idx.str.lstrip()
Out[11]:
In [12]:
idx.str.rstrip()
Out[12]:
Index的字符串方法在处理DataFrame的列名时很有用。
In [21]:
df = pd.DataFrame(np.random.randn(3, 2), columns=[' Column A', ' Column B '],
index=range(3))
In [22]:
df
Out[22]:
df.columns是一个Index对象。所以可以用.str:
In [23]:
df.columns.str.strip()
Out[23]:
In [24]:
df.columns.str.lower()
Out[24]:
In [25]:
df.columns = df.columns.str.strip().str.lower().str.replace(' ', '_')
In [26]:
df
Out[26]:
In [27]:
s2 = pd.Series(['a_b_c', 'c_d_e', np.nan, 'f_g_h'])
In [29]:
s2
Out[29]:
In [30]:
s2.str.split('_') # 返回的Series,值是list
Out[30]:
通过[]或get来访问返回的列表元素:
In [31]:
s2.str.split('_').str.get(1)
Out[31]:
In [32]:
s2.str.split('_').str[1]
Out[32]:
使用expand参数来返回一个DataFrame.
In [33]:
s2.str.split('_', expand=True)
Out[33]:
通过参数n来限制DataFrame的列数:
In [34]:
s2.str.split('_', expand=True, n=1)
Out[34]:
In [35]:
s2.str.rsplit('_', expand=True, n=1)
Out[35]:
replace()和findall()也接收正则表达式作参数:
In [36]:
s3 = pd.Series(['A', 'B', 'C', 'Aaba', 'Baca',
'', np.nan, 'CABA', 'dog', 'cat'])
In [37]:
s3
Out[37]:
In [38]:
s3.str.replace('^.a|dog', 'XX-XX', case=False)
Out[38]:
In [ ]:
In [ ]: