Pandas 中功能强大高效的的 str 用法,你会用吗?

相信长期用 Pandas 的人有时会发现一些特别方便快捷的用法,然后会感叹,要是早知道这些用法之前处理数据的时候就方便多了。今天和大家一起分享我最近发现的 Pandas 中一个功能强大高效快捷的 str 用法。

首先来感受下 str 非常强大的用法。

假设我们有如下的一列数据,想要以 _ 做为分隔符把该列数据变成三列,该怎么办呢?

In [5]: s2 = pd.Series(['a_b_c', 'c_d_e', np.nan, 'f_g_h'])

In [6]: s2
Out[6]:
0    a_b_c
1    c_d_e
2      NaN
3    f_g_h
dtype: object

来看看用 str 方法一行代码就可以实现。

In [7]: s2.str.split('_', expand=True)
Out[7]:
     0    1    2
0    a    b    c
1    c    d    e
2  NaN  NaN  NaN
3    f    g    h

接下来让我们看看 str 方法中比较常用的几个用法。

1、字符串大小写转换,统计字符串个数

In [1]: s = pd.Series(['A', 'B', 'C', 'Aaba', 'Baca', np.nan, 'CABA', 'dog', 'cat'])

In [2]: s.str.lower() # 将Series中所有字符串变为小写
Out[2]: 
0       a
1       b
2       c
3    aaba
4    baca
5     NaN
6    caba
7     dog
8     cat
dtype: object

In [3]: s.str.upper() # 将Series中所有字符串变为大写
Out[3]: 
0       A
1       B
2       C
3    AABA
4    BACA
5     NaN
6    CABA
7     DOG
8     CAT
dtype: object

In [4]: s.str.len() # 统计Series中字符串个数
Out[4]: 
0    1.0
1    1.0
2    1.0
3    4.0
4    4.0
5    NaN
6    4.0
7    3.0
8    3.0
dtype: float64

2、分割字符串(str.split)

In [15]: s2 = pd.Series(['a_b_c', 'c_d_e', np.nan, 'f_g_h'])

In [16]: s2.str.split('_')
Out[16]: 
0    [a, b, c]
1    [c, d, e]
2          NaN
3    [f, g, h]
dtype: object


In [17]: s2.str.split('_').str.get(1) # 获取分割后字符串的第一列
Out[17]: 
0      b
1      d
2    NaN
3      g
dtype: object

3、替换字符串(str.replace)(搭配正则表达式效果更强大)

In [22]: s3 = pd.Series(['A', 'B', 'C', 'Aaba', 'Baca',
   ....:                '', np.nan, 'CABA', 'dog', 'cat'])
   ....: 

In [23]: s3
Out[23]: 
0       A
1       B
2       C
3    Aaba
4    Baca
5        
6     NaN
7    CABA
8     dog
9     cat
dtype: object

In [24]: s3.str.replace('^.a|dog', 'XX-XX ', case=False)
Out[24]: 
0           A
1           B
2           C
3    XX-XX ba
4    XX-XX ca
5            
6         NaN
7    XX-XX BA
8      XX-XX 
9     XX-XX t
dtype: object

4、把一列合并内容成一个字符串(str.cat)

In [41]: s = pd.Series(['a', 'b', 'c', 'd'])

In [42]: s.str.cat(sep=',')
Out[42]: 'a,b,c,d'

In [43]: s.str.cat()
Out[43]: 'abcd'

# 同理用 cat 也可以把两列数据合并为一列数据

5、筛选符合条件的内容(str.contains)

In [13]: s4 = pd.Series(['A', 'B', 'C', 'Aaba', 'Baca', np.nan, 'CABA', 'dog', '
    ...: cat'])

In [14]: s4[s4.str.contains('A', na=False)]
Out[14]:
0       A
3    Aaba
6    CABA
dtype: object

In [15]:

由于篇幅限制,还有其它很多实用的方法就不一一介绍了,感兴趣的话可以去看官方文档

https://pandas.pydata.org/pandas-docs/stable/user_guide/text.html

为了及时收到文章更新,欢迎关注个人公众号:Python实战数据分析

发表评论

电子邮件地址不会被公开。