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. COGS 678. 双重回文数

    ★   输入文件:dualpal.in   输出文件:dualpal.out   简单对比时间限制:1 s   内存限制:128 MB Dual Palindromes 双重回文数 描述 [USACO ...

  2. s7nodave用于上位机连接西门子PLC,开源项目epics

    s7nodave 可以看作是Prodave的开源替代者,在PLC侧,不需要编程 This device support does not require any special programming ...

  3. sublim插件(待续)

    imesupport SublimeText3默认不支持输入法跟随光标,这在输入中文的时候看起来不方便. 进入SublimeText3在上面菜单栏里Perferences点击PackageContro ...

  4. SSM框架整合:转自:http://blog.csdn.net/zhshulin

    使用SSM(Spring.SpringMVC和Mybatis)已经有三个多月了,项目在技术上已经没有什么难点了,基于现有的技术就可以实现想要的功能,当然肯定有很多可以改进的地方.之前没有记录SSM整合 ...

  5. 2017.9.27 JavaWeb 属性的设置和获取

    3.4.3新属性的设置和获取 对于getpParamter方法是通过参数传递获得数据, 设置数据的方法格式: void  request.setAttribute("key",Ob ...

  6. 安装gcc,g++

    安装gcc.g++ sudo apt-get install make gcc g++ 查看g++版本 g++ --version

  7. Git基础篇

    对于Git的一些基础了解,安装,里面的一些名词,这里就不做介绍了.主要记录怎么使用GIt. 本篇介绍: 配置个人信息        生成本地仓库并与远程库相连        添加SSH秘钥       ...

  8. System.TimeDate

    本篇将介绍时间类型. msdn官网:点击查看 时间辅助类:点击查看  方法:计算两个时间的时间差(年月日小时分钟),获取时间戳,时间格式转换,获取时间随机码 定义:表示时间上的一刻,通常以日期和当天的 ...

  9. 关于Java的反射机制,你需要理解这些..

    转载请标明出处: http://blog.csdn.net/forezp/article/details/53730429 本文出自方志朋的博客 反射机制是在运行状态中,对于任意一个类,都能够知道这个 ...

  10. 第34-2题:LeetCode113. Path Sum II

    题目 给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径. 说明: 叶子节点是指没有子节点的节点. 示例: 给定如下二叉树,以及目标和 sum = 22, 5 / \ ...