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

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

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

s = pd.Series(['A','b','C','bbhello','',np.nan,'hj'])
df = pd.DataFrame({'key1':list('abcdef'),
'key2':['hee','fv','w','hija','',np.nan]})
print(s)
print(df)
print('-----') print(s.str.count('b')) #对字符b进行计数
print(df['key2'].str.upper()) #upper全部变成大写
print('-----')
# 直接通过.str调用字符串方法
# 可以对Series、Dataframe使用
# 自动过滤NaN值 df.columns = df.columns.str.upper() #把所有的列名变为大写的。
print(df)
# df.columns是一个Index对象,也可使用.str

输出结果:

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
-----
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.字符串常用方法(1) - lower,upper,len,startswith,endswith

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

print(s.str.lower(),'→ lower小写\n')
print(s.str.upper(),'→ upper大写\n')
print(s.str.len(),'→ len字符长度\n')
print(s.str.startswith('b'),'→ 判断起始是否为b\n')
print(s.str.endswith(''),'→ 判断结束是否为3\n')

输出结果:

0          a
1 b
2 bbhello
3 123
4 NaN
dtype: object → lower小写 0 A
1 B
2 BBHELLO
3 123
4 NaN
dtype: object → upper大写 0 1.0
1 1.0
2 7.0
3 3.0
4 NaN
dtype: float64 → len字符长度 0 False
1 True
2 True
3 False
4 NaN
dtype: object → 判断起始是否为b 0 False
1 False
2 False
3 True
4 NaN
dtype: object → 判断结束是否为3

3.字符串常用方法(2) - strip

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)
print('-----') print(s.str.strip()) #去除前后的空格
print(s.str.lstrip()) # 去除字符串中的左空格
print(s.str.rstrip()) # 去除字符串中的右空格 df.columns = df.columns.str.strip()
print(df)
# 这里去掉了columns的前后空格,但没有去掉中间空格

输出结果:

0       jack
1 jill
2 jesse
3 frank
dtype: object
Column A Column B
0 -1.110964 -0.607590
1 2.043887 0.713886
2 0.840672 -0.854777
-----
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
Column A Column B
0 -1.110964 -0.607590
1 2.043887 0.713886
2 0.840672 -0.854777

4.字符串常用方法(3) - replace

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)
# n:替换个数

输出结果:

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)
# n:替换个数

5.(1)字符串常用方法(4) - split、rsplit

s = pd.Series(['a,b,c','1,2,3',['a,,,c'],np.nan])
print(s,'\n')
print(s.str.split(','))
print('1-----','\n')
# 类似字符串的split print(s.str.split(',')[0])
print('2-----','\n')
# 直接索引得到一个list print(s.str.split(',').str[0])
print('3-----','\n')
print(s.str.split(',').str.get(1))
print('4-----','\n')
# 可以使用get或[]符号访问拆分列表中的元素 print(s.str.split(',', expand=True))
print('5-----','\n')
print(s.str.split(',', expand=True, n = 1))
print('6-----','\n')
print(s.str.rsplit(',', expand=True, n = 1))
print('7-----','\n')
# 可以使用expand可以轻松扩展此操作以返回DataFrame
# n参数限制分割数
# rsplit类似于split,反向工作,即从字符串的末尾到字符串的开头 df = pd.DataFrame({'key1':['a,b,c','1,2,3',[':,., ']],
'key2':['a-b-c','1-2-3',[':-.- ']]})
print(df,'\n8-----\n')
print(df['key2'].str.split('-'))
# Dataframe使用split

输出结果:

0      a,b,c
1 1,2,3
2 [a,,,c]
3 NaN
dtype: object 0 [a, b, c]
1 [1, 2, 3]
2 NaN
3 NaN
dtype: object
1----- ['a', 'b', 'c']
2----- 0 a
1 1
2 NaN
3 NaN
dtype: object
3----- 0 b
1 2
2 NaN
3 NaN
dtype: object
4----- 0 1 2
0 a b c
1 1 2 3
2 NaN None None
3 NaN None None
5----- 0 1
0 a b,c
1 1 2,3
2 NaN None
3 NaN None
6----- 0 1
0 a,b c
1 1,2 3
2 NaN None
3 NaN None
7----- key1 key2
0 a,b,c a-b-c
1 1,2,3 1-2-3
2 [:,., ] [:-.- ]
8----- 0 [a, b, c]
1 [1, 2, 3]
2 NaN
Name: key2, dtype: object

5.(2)

df = pd.DataFrame({'key1':['a,b,c','1,2,3',[':,., ']],
'key2':['a-b-c','1-2-3',[':-.- ']]})
print(df,'\n8-----\n')
print(df['key2'].str.split('-'),'\n')
print(df['key2'].str.split('-',expand = True))
df['k201'] = df['key2'].str.split('-').str[0]
print('\n')
print(df['k201'])
df['k202'] = df['key2'].str.split('-').str[1]
df['k203'] = df['key2'].str.split('-').str[2]
df

输出结果:

   key1     key2
0 a,b,c a-b-c
1 1,2,3 1-2-3
2 [:,., ] [:-.- ]
8----- 0 [a, b, c]
1 [1, 2, 3]
2 NaN
Name: key2, dtype: object 0 1 2
0 a b c
1 1 2 3
2 NaN None None 0 a
1 1
2 NaN
Name: k201, dtype: object

6.(1)字符串索引

# 字符串索引

s = pd.Series(['A','b','C','bbhello','',np.nan,'hj'])
df = pd.DataFrame({'key1':list('abcdef'),
'key2':['hee','fv','w','hija','',np.nan]}) print(s,'\n')
print(s.str[0],'\n') # 取第一个字符串
print(s.str[:2],'\n') # 取前两个字符串
print(df,'\n')
print(df['key2'].str[0])
# str之后和字符串本身索引方式相同

输出结果:

0          A
1 b
2 C
3 bbhello
4 123
5 NaN
6 hj
dtype: object 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 key1 key2
0 a hee
1 b fv
2 c w
3 d hija
4 e 123
5 f NaN 0 h
1 f
2 w
3 h
4 1
5 NaN
Name: key2, dtype: object

6.(2)

df = pd.DataFrame({'key1':list('abcdef'),
'key2':['hee','fv','w','hija','',np.nan]})
df['new'] = df['key2'].str[0]
df

输出结果:

练习题:

作业1:如图创建一个Dataframe,并分别通过字符串常用方法得到3个Series或得到新的Dataframe:

① name字段首字母全部大写

② gender字段去除所有空格

③ score字段按照-拆分,分别是math,english,art三个学分

import numpy as np
import pandas as pd df = pd.DataFrame({'gender':['M ',' M',' F ',' M ',' F'],
'Name':['jack','tom','marry','zack','heheda'],
'score':['90-90-90','89-89-89','90-90-90','78-78-78','60-60-60']})
print(df,'\n')
df['Name'] = df['Name'].str.capitalize() #首字母大写
print(df,'\n')
df['Name'] = df['Name'].str.upper() #全部大写
print(df,'\n') df['gender'] = df['gender'].str.strip() #去掉所有空格
print(df,'\n') df['Math'] = df['score'].str.split('-').str[0]
df['English'] = df['score'].str.split('-').str[1]
df['Art'] = df['score'].str.split('-').str[2]
print(df,'\n')
print(df['Math'].dtype) #字符串类型
#改为整型
df['Math'] = df['Math'].astype(np.int)
print(df['Math'].dtype) #整型

输出结果:

   Name gender     score
0 jack M 90-90-90
1 tom M 89-89-89
2 marry F 90-90-90
3 zack M 78-78-78
4 heheda F 60-60-60 Name gender score
0 Jack M 90-90-90
1 Tom M 89-89-89
2 Marry F 90-90-90
3 Zack M 78-78-78
4 Heheda F 60-60-60 Name gender score
0 JACK M 90-90-90
1 TOM M 89-89-89
2 MARRY F 90-90-90
3 ZACK M 78-78-78
4 HEHEDA F 60-60-60 Name gender score
0 JACK M 90-90-90
1 TOM M 89-89-89
2 MARRY F 90-90-90
3 ZACK M 78-78-78
4 HEHEDA F 60-60-60 Name gender score Math English Art
0 JACK M 90-90-90 90 90 90
1 TOM M 89-89-89 89 89 89
2 MARRY F 90-90-90 90 90 90
3 ZACK M 78-78-78 78 78 78
4 HEHEDA F 60-60-60 60 60 60 object
int32

Pandas 文本数据的更多相关文章

  1. Python文本数据互相转换(pandas and win32com)

    (工作之后,就让自己的身心都去休息吧) 今天介绍一下文本数据的提取和转换,这里主要实例的转换为excel文件(.xlsx)转换world文件(.doc/docx),同时需要使用win32api,同py ...

  2. pandas处理大文本数据

    当数据文件是百万级数据时,设置chunksize来分批次处理数据 案例:美国总统竞选时的数据分析 读取数据 import numpy as np import pandas as pdfrom pan ...

  3. 如何使用 scikit-learn 为机器学习准备文本数据

    欢迎大家前往云+社区,获取更多腾讯海量技术实践干货哦~ 文本数据需要特殊处理,然后才能开始将其用于预测建模. 我们需要解析文本,以删除被称为标记化的单词.然后,这些词还需要被编码为整型或浮点型,以用作 ...

  4. 机器学习入门-文本数据-构造词频词袋模型 1.re.sub(进行字符串的替换) 2.nltk.corpus.stopwords.words(获得停用词表) 3.nltk.WordPunctTokenizer(对字符串进行分词操作) 4.np.vectorize(对函数进行向量化) 5. CountVectorizer(构建词频的词袋模型)

    函数说明: 1. re.sub(r'[^a-zA-Z0-9\s]', repl='', sting=string)  用于进行字符串的替换,这里我们用来去除标点符号 参数说明:r'[^a-zA-Z0- ...

  5. pynlpir + pandas 文本分析

    pynlpir是中科院发布的一个分词系统,pandas(Python Data Analysis Library) 是python中一个常用的用来进行数据分析和统计的库,利用这两个库能够对中文文本数据 ...

  6. Pandas中数据的处理

    有两种丢失数据 ——None ——np.nan(NaN) None是python自带的,其类型为python object.因此,None不能参与到任何计算中 Object类型的运算比int类型的运算 ...

  7. Pandas文本数据处理

    先初始化数据 import pandas as pd import numpy as np index = pd.Index(data=["Tom", "Bob" ...

  8. 【tensorflow2.0】处理文本数据

    一,准备数据 imdb数据集的目标是根据电影评论的文本内容预测评论的情感标签. 训练集有20000条电影评论文本,测试集有5000条电影评论文本,其中正面评论和负面评论都各占一半. 文本数据预处理较为 ...

  9. Bulk Insert:将文本数据(csv和txt)导入到数据库中

    将文本数据导入到数据库中的方法有很多,将文本格式(csv和txt)导入到SQL Server中,bulk insert是最简单的实现方法 1,bulk insert命令,经过简化如下 BULK INS ...

随机推荐

  1. LOJ#137. 最小瓶颈路 加强版(Kruskal重构树 rmq求LCA)

    题意 三倍经验哇咔咔 #137. 最小瓶颈路 加强版 #6021. 「from CommonAnts」寻找 LCR #136. 最小瓶颈路 Sol 首先可以证明,两点之间边权最大值最小的路径一定是在最 ...

  2. position 的属性值

    理论上来说,全部 position 的取值有8个 包括:position:static | relative | absolute | fixed | sticky |  initial | inhe ...

  3. [SVN]TortoiseSVN工具培训1─为什么要用SVN?

    你是否有经历过以下情况: SVN的使用理由/好处:

  4. redis笔记(一)

    redis安装 ubuntu:     apt-get install redis-server redis服务  :redis-server 启动客户端   :redis-cli redis简单知识 ...

  5. Windows server R2 2008上部署gogs git

      所需的环境 1.     安装mysql                       安装路径:F:\MySQL Server 5.7 2.     安装gogs                  ...

  6. Python基础学习之变量赋值

    1.赋值操作符 Python语言中,等号(=)是主要的赋值操作符: >>> aInt=-100 >>> aString='this is a string' > ...

  7. U深度U盘启动盘制作工具怎么用?U深度U盘启动盘制作工具使用教学

    U深度u盘启动盘制作工具是一款强大的启动盘制作软件,对于新手用户来说,由于软件专业度很高,想一下就上手是比较困难的.所以这里给大家分享一篇U深度u盘启动盘制作工具的使用教程. 使用教程: 第一步:安装 ...

  8. 第三章 八位数字开关板&模拟输入板&火焰传感器

    这节我将带大家了解亮宁机器人基础外接硬件. 八位数字板开关 接线方法:W1~W8接23~37号数字端口,Enter接39号数字端口,vcc和gnd分别接正负. #include <LNDZ.h& ...

  9. [原创][Windows] Win7安装visual c++ 2015 redistributable x64失败

    在win7中安装visual c++ 2015 redistributable x64 时会卡住,原因是visual c++ 2015 redistributable x64 需要KB2999226, ...

  10. do..while(false)的用法总结

    首先要注意: do..while(0) 代表do里面的东西至少被执行一次,在这里仅仅执行一次. 此种用法有三个用处: 代替{}代码块,实现局部作用域.在某些宏定义时非常有用: #define f(x) ...