【python数据分析(11)】Pandas针对文本数据处理(字符串判断、两端数据处理、替换与分割、基本索引)

1. Pandas针对文本数据处理

1)Pandas针对字符串配备的一套方法,使其易于对数组的每个元素进行操作;

2)通过str访问,且 自动排除丢失/ NA值

3)比如在上一篇末尾提及到了成员资格判断中的.str.contains()的方法

样本数据生成

s = pd.Series(['A','b','C','bbhello','123',np.nan,'hj'])
df = pd.DataFrame({'key1':list('abcdef'),
                  'key2':['hee','fv','w','hija','123',np.nan]})
print(s)
print(df)

–> 输出的结果为:

0          A
1          b
2          C
3    bbhello
4        123
5        NaN
6         hj
dtype: object

  key1  key2
0    a   hee
1    b    fv
2    c     w
3    d  hija
4    e   123
5    f   NaN

4) 简单的demo,比如进行计数,大小写判断等

print(s.str.count('b'))
print(df['key2'].str.upper())

df.columns = df.columns.str.upper()
print(df)

–> 输出的结果为:(第一个输出是判断每行里面含‘b’的个数,第二个输出是将 字符 改成大写,第三个输出是将标题大写)

0    0.0
1    1.0
2    0.0
3    2.0
4    0.0
5    NaN
6    0.0
dtype: float64

0     HEE
1      FV
2       W
3    HIJA
4     123
5     NaN
Name: key2, dtype: object

  KEY1  KEY2
0    a   hee
1    b    fv
2    c     w
3    d  hija
4    e   123
5    f   NaN

2. 字符串常用方法

之前可以用在字符串上的一些方法,在使用.str之后,也是可以正常使用在DataFrame数据中的

2.1 字符串判断函数

.lower().upper().len().startswith().endswith()

样本数据生成

s = pd.Series(['A','b','bbhello','123',np.nan])
print(s)

–> 输出的结果为:

0          A
1          b
2    bbhello
3        123
4        NaN
dtype: object

相应的判断函数操作

print(s.str.lower())
print(s.str.upper())
print(s.str.len())
print(s.str.startswith('b'))
print(s.str.endswith('3'))

–> 输出的结果为:(注意最后的数据类型,第三个输出的是数值型)

0          a
1          b
2    bbhello
3        123
4        NaN
dtype: object

0          A
1          B
2    BBHELLO
3        123
4        NaN
dtype: object

0    1.0
1    1.0
2    7.0
3    3.0
4    NaN
dtype: float64

0    False
1     True
2     True
3    False
4      NaN
dtype: object

0    False
1    False
2    False
3     True
4      NaN
dtype: object
2.2 字符串两端数据处理函数

.strip().lstrip().rstrip() 分别是去掉两端、左端、右端数据的字符串处理方法

样本数据生成

s = pd.Series([' jack', 'jill ', ' jesse ', 'frank'])
df = pd.DataFrame(np.random.randn(3, 2), columns=[' Column A ', ' Column B '],
                  index=range(3))
print(s)
print(df)

–> 输出的结果为:(注意数据内部的空格)

0       jack
1      jill 
2     jesse 
3      frank
dtype: object

    Column A    Column B 
0    0.106196   -1.530680
1    0.076250    0.699981
2   -1.816159    0.067348

内部数据两端的空格清除

print(s.str.strip())  
print(s.str.lstrip())  
print(s.str.rstrip())  

–> 输出的结果为:(三种输出可以进行对比,主要区别是在排列方式上)

0     jack
1     jill
2    jesse
3    frank
dtype: object

0      jack
1     jill 
2    jesse 
3     frank
dtype: object

0      jack
1      jill
2     jesse
3     frank
dtype: object

列标题数据两端的空格清除

df.columns = df.columns.str.strip()
print(df)

–> 输出的结果为:

   Column A  Column B
0  0.106196 -1.530680
1  0.076250  0.699981
2 -1.816159  0.067348
2.3 字符串中数据的替换

.replace(old,new,n=num)old要被替换的内容, new欲添加的内容,num表示替换几处

df = pd.DataFrame(np.random.randn(3, 2), columns=[' Column A ', ' Column B '],
                  index=range(3))
df.columns = df.columns.str.replace(' ','-')
print(df)

df.columns = df.columns.str.replace('-','hehe',n=1)
print(df)

–> 输出的结果为:

   -Column-A-  -Column-B-
0    0.130360   -1.210729
1    0.681419   -0.063032
2    0.159494    1.012640

   heheColumn-A-  heheColumn-B-
0       0.130360      -1.210729
1       0.681419      -0.063032
2       0.159494       1.012640
2.4 字符串的数据切分

.split().rsplit()

s = pd.Series(['a,b,c','1,2,3',['a,,,c'],np.nan])
print(s.str.split(','))
print(s.str.split(',')[0])

–> 输出的结果为:(可以对内部数据进行拆分,并索引)

0    [a, b, c]
1    [1, 2, 3]
2          NaN
3          NaN
dtype: object

['a', 'b', 'c']

★★★★★ 可以使用get或[]符号访问拆分列表中的元素

print(s.str.split(',').str[0])
print(s.str.split(',').str.get(1))

–> 输出的结果为:

0      a
1      1
2    NaN
3    NaN
dtype: object

0      b
1      2
2    NaN
3    NaN
dtype: object

★★★★★ 可以使用expand可以轻松扩展此操作以返回DataFrame(类似excel按照某种规则分列)

n参数限制分割数

rsplit类似于split,反向工作,即从字符串的末尾到字符串的开头

print(s.str.split(',', expand=True))
print(s.str.split(',', expand=True, n = 1))
print(s.str.rsplit(',', expand=True, n = 1))

–> 输出的结果为:(理解rsplit的使用结果)

     0    1    2
0    a    b    c
1    1    2    3
2  NaN  NaN  NaN
3  NaN  NaN  NaN

     0    1
0    a  b,c
1    1  2,3
2  NaN  NaN
3  NaN  NaN

     0    1
0  a,b    c
1  1,2    3
2  NaN  NaN
3  NaN  NaN
2.5 字符串索引

.str 之后和字符串本身索引方式相同

s = pd.Series(['A','b','C','bbhello','123',np.nan,'hj'])
df = pd.DataFrame({'key1':list('abcdef'),
                  'key2':['hee','fv','w','hija','123',np.nan]})

print(s.str[0])  # 取第一个字符串
print(s.str[:2])  # 取前两个字符串
print(df['key2'].str[0]) 

–> 输出的结果为:

0      A
1      b
2      C
3      b
4      1
5    NaN
6      h
dtype: object

0      A
1      b
2      C
3     bb
4     12
5    NaN
6     hj
dtype: object

0      h
1      f
2      w
3      h
4      1
5    NaN
Name: key2, dtype: object
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lys_828

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值