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. sass文件转css时注释虽然支持中文,但是出现乱码的解决方法

    sass文件转css时注释虽然支持中文,但是出现乱码的解决方法 Scss 注释中文报错问题(windows系统, 已解决)找到ruby的安装目录,里面也有sass模块,类似这样样的路径:F:\Prog ...

  2. Jetty服务器的使用

    Jetty 是一个开源的servlet容器,它为基于Java的web容器,例如JSP和servlet提供运行环境.Jetty是使用Java语言编写的,它的API以一组JAR包的形式发布.开发人员可以将 ...

  3. php的yii框架开发总结2

    开发流程:1.用yii创建网站目录,当时用命令行创建时遇到了问题,试了很久才找到原因:我的原因是在yii/framework/yiic.bat这个文件中的一条语句: if "%PHP_COM ...

  4. 有趣的回文数(Palindrome number)

    文章转自http://blog.163.com/hljmdjlln@126/blog/static/5473620620120412525181/ 做LC上的题"Palindrome num ...

  5. MySQL安装和简单操作

    MySQL数据库安装与配置详解 MySQL的安装请参考下面这篇博客,讲述的非常详细,各种截图也很清晰.http://www.cnblogs.com/sshoub/p/4321640.html MySQ ...

  6. 整数N分解,搭积木,离散数学中的母函数,ZOJ(1163)

    题目链接:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=1163 解题报告: 将整数N分解为:两个及以上的不重复的整数,最流 ...

  7. iOS 有些库只能在真机上运行,不能在模拟器上运行的解决方式

    在开发中,多少肯定会用到第三方的东西,或许大家也和我一样遇到到这样的情况,有些库正好适合自己的需求,但是这个库却只支持真机上运行,在模拟器上编译却不通过, 一般情况下,.a静态包,你刚刚导入的时候,不 ...

  8. MapReduce执行jar练习

    1.用程序生成输入文件1.txt和2.txt 生成程序源码如下: https://www.cnblogs.com/jonban/p/10555364.html 2.  上传文件到hdfs文件系统 创建 ...

  9. matlab的figure窗口命名为中文

    figure('NumberTitle', 'off', 'Name', '我的窗口名字');

  10. numpy中生成随机矩阵并打印出矩阵的shape

    from numpy import * c=zeros((4,5)) print c.shape print numpy.random.random((2,3))