京公网安备 11010802034615号
经营许可证编号:京B2-20210330
一句python,一句R︱python中的字符串操作、中文乱码、NaN情况
先学了R,最近刚刚上手Python,所以想着将python和R结合起来互相对比来更好理解python。最好就是一句python,对应写一句R。
pandas可谓如雷贯耳,数据处理神器。
以下符号:
=R=
代表着在R中代码是怎么样的。
————————————————————————————————————————————
字符编码
encode 和 decode
Python2 默认的编码是 ascii,通过 encode 可以将对象的编码转换为指定编码格式(称作“编码”),而 decode 是这个过程的逆过程(称作“解码”)。
decode,将字节串转变为字符串,并且这个字符串是按照 unicode 编码的。在 unicode 编码中,一个汉字对应一个字符,这时候度量它的长度就是 1.
encode,一个 unicode 编码的字符串,也可以转换为字节串。
[html] view plain copy
print?
>>> a = "中"
>>> a
'\xe4\xb8\xad'
>>> b = a.decode()
>>> b
u'\u4e2d'
其中,a就是ASCII格式的编码,字节串;b就是unicode编码的字符串。当然有一个问题就是最后出来的还不是汉字。。。(醉!)
————————————————————————————————————————————
一、字符形成、展示、拼接、切片
1、字符形成=R=paste
双引号包裹单引号
[html] view plain copy
print?
>>> "What's your name?"
"What's your name?"
单引号使用转义符
[html] view plain copy
print?
>>> 'What\'s your name?'
"What's your name?"
2、字符串展示print /raw_input
[html] view plain copy
print?
>>> name = raw_input("input your name:")
input your name:python
>>> name
'python'
其中raw_input有点交互关系,具体看案例,直接键入name就可以获得你输入的内容。
[html] view plain copy
print?
>>> print("hello, world")
hello, world
3、字符切片、选择、截取 =R=无
字符可以像一般的数据格式一样进行切片选择,有点像series:
[html] view plain copy
print?
>>> lang = "study Python"
>>> lang[0]
's'
>>> lang[2:9]
'udy pyt'
当然也包括lang[:]可以选中所有的。
其中index代表着某个字符的索引值。
[html] view plain copy
print?
lang.index("p")
4、内存编号 =R= 无
这个与R中不一样,当数据存入python之后,机器会自动给存入内存的数据编号,这个编号可以用id来查看。
[html] view plain copy
print?
>>> id(c)
3071934536L
>>> id(lang)
3071934536L
5、ASCII 值(是十进制的)
ord("a") 代表输入字符返回ASCII值
cha(97) 代表输入ASCII值返回字符
[html] view plain copy
print?
>>> cmp("a","b") #a-->97, b-->98, 97 小于 98,所以 a 小于 b
-1
其中cmp()代表比较 a b 两个字符的ASCII值的大小,返回值为1,0,-1
[html] view plain copy
print?
>>> max(str1)
'd'
>>> max(str2)
'e'
>>> min(str1)
'a'
返回字符的ASCII值的最大值。
————————————————————————————————————————————
二、字符串基本操作
1、字符串重复 =R=rep
[html] view plain copy
print?
>>> str1*3
'abcdabcdabcd'
其中变成字符串有两种方式:一种是str()或者是用单引号来表示。
2、字符串拼接
(1)+ 号 =R= paste
[html] view plain copy
print?
>>> "Py" + "thon"
'Python'
>>> a = 1989
>>> b = "free"
>>> print b+“a”
>>> print b+str(a)
其中变成字符串有两种方式:一种是str()或者是用单引号来表示。
乘法,就是重复那个字符串的含义。
(2)join =R= paste

用 . 来填补间隔中的内容。
3、语句分割split =R= split
这个函数的作用是将字符串根据某个分割符进行分割。
[html] view plain copy
print?
>>> a = "I LOVE PYTHON"
>>> a.split(" ")
['I', 'LOVE', 'PYTHON']
其中split(“ ”)括号中,代表着依据什么样式来进行分割。
4、字符串去掉空格 = R=grep
方法是:
S.strip() 去掉字符串的左右空格
S.lstrip() 去掉字符串的左边空格
S.rstrip() 去掉字符串的右边空格
[html] view plain copy
print?
>>> b=" hello " # 两边有空格
>>> b.strip()
'hello'
5、字符串大小写
在 Python 中有下面一堆内建函数,用来实现各种类型的大小写转化
S.upper() #S 中的字母大写
S.lower() #S 中的字母小写
S.capitalize() # 首字母大写
S.isupper() #S 中的字母是否全是大写
S.islower() #S 中的字母是否全是小写
S.istitle()
S.title() #把所有的单词的第一个字母转化为大写
S.istitle() #判断每个单词的第一个字母是否为大写
6、in 包含关系 =R=%in%
类似集合计算,a in b代表a是否包含在b中,返回的是布尔值。
[html] view plain copy
print?
>>> "a" in str1
True
>>> "de" in str1
False
>>> "de" in str2
True
7、字符长度len =R= length
[html] view plain copy
print?
>>> a="hello"
>>> len(a)
5
————————————————————————————————————————————
三、转义符、占用符列表
1、转义符列表
在字符串中,有时需要输入一些特殊的符号,但是,某些符号不能直接输出,就需要用转义符。所谓转义,就是不采用符号本来的含义,而采用另外一含义了。下面表格中列出常用的转义符:
转义字符 描述
\ (在行尾时) 续行符
\ 反斜杠符号
\' 单引号
\" 双引号
\a 响铃
\b 退格(Backspace)
\e 转义
\000 空
\n 换行
\v 纵向制表符
\t 横向制表符
\r 回车
\f 换页
\oyy 八进制数,yy 代表的字符,例如:\o12 代表换行
\xyy 十六进制数,yy 代表的字符,例如:\x0a 代表换行
\other 其它的字符以普通格式输出
以上所有转义符,都可以通过交互模式下 print 来测试一下,感受实际上是什么样子的。
2、占位符
占位符在自动生成字符内容方面有很好的应用:
[html] view plain copy
print?
>>> print "我%s喜欢NLP" % "非常"
我非常喜欢NLP
(1)老式占位符%s
另外,不同的占位符,会表示那个位置应该被不同类型的对象填充。下面列出许多,供参考。不过,不用记忆,常用的只有 %s 和 %d,或者再加上 %f,其它的如果需要了,到这里来查即可。

(2)新式{}
[html] view plain copy
print?
>>> print "我{}喜欢NLP" .format("非常")
我非常喜欢NLP
Python 非常提倡的 string.format()的格式化方法,其中 {} 作为占位符。
这种方法真的是非常好,而且非常简单,只需要将对应的东西,按照顺序在 format 后面的括号中排列好,分别对应占位符 {} 即可。我喜欢的方法。
四、Python 中如何避免中文是乱码
这个问题是一个具有很强操作性的问题。我这里有一个经验总结,分享一下,供参考:
首先,提倡使用 utf-8 编码方案,因为它跨平台不错。
经验一:在开头声明:
# -*- coding: utf-8 -*-
有朋友问我-*-有什么作用,那个就是为了好看,爱美之心人皆有,更何况程序员?当然,也可以写成:
# coding:utf-8
经验二:遇到字符(节)串,立刻转化为 unicode,不要用 str(),直接使用 unicode()
unicode_str = unicode('中文', encoding='utf-8')
print unicode_str.encode('utf-8')
经验三:如果对文件操作,打开文件的时候,最好用 codecs.open,替代 open(这个后面会讲到,先放在这里)
import codecs
codecs.open('filename', encoding='utf8')
五、Python正则表达式:re的match方法(来源公众号人人可以学python)
Python 从1.5版本起添加了模块re ,提供 Perl 风格的正则表达式模式
我们经常用的有re.match( ), re.search( ),re.sub( ), 下面我们一个一个来讲一下。
其中注意它们各自的区别
re.match( )
match( )从要匹配的字符串的起始位置开始匹配一个正则表达式。如果起始位置匹配失败,则返回None
re.match(pattern, string, flags=0)
参数:
pattern: 正则表达式
string:要匹配的字符串
flags:标志位,用来控制匹配模式
[html] view plain copy
print?
举例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import re
str1 = "Allen is renren python"
print re.match('Bllen', str1)
print re.match('Allen', str1)
print re.match('.*renren.*', str1)
allenwoo@~/renren$ python test.py
第一个由于一开始匹配不成功,所以结果是None
第二个在字符串开始就找到了“Allen”所以匹配成功,返回结果
第三个," . "表示任何字符,“ * ”表示前面一个修饰符有任何个(包括0个)
所以" .* "就是匹配任何个数的任何字符的意思。
[html] view plain copy
print?
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import re
str1 = "Allen is renren python"
r = re.match('Allen', str1)
# span是返回我们匹配到的字符串的开始和结束的下标
print r.span()
# group返回我们匹配到的字符串
print r.group()
print "\n"
r = re.match('.*renren.*', str1)
print r.span()
print r.group()
数字匹配可以使用\w或者[0-9]
比如要匹配字符串"Jack age:18,sex:m"中的数字
[html] view plain copy
print?
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import re
str1 = "Jack age:18,sex:m"
r = re.match('.*\w+.*', str1)
if r:
print r.group()
print "\n"
r = re.match('.*[0-9]+.*', str1)
if r:
print r.group()
print("分组匹配输出")
r = re.match(r'(.*):([0-9]+).*', str1)
if r:
print r.group()
print r.group(1)
print r.group(2)
你会发现我们在正则表达式中使用()就能分组匹配,然后可以使用group返回每个括号中匹配的字符串。
注意: 在re.match(r'(.*):([0-9]+).*', str1)的表达式前面我们使用了一个 r, r是防止字符串转意,因为我们使用了(),我们不希望它被当作要匹配的字符。
附:那这就先讲一下转意:
[html] view plain copy
print?
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 大家都知道\n是换行符,
# 而\t 是tab空格,相当于我们键盘的tab键
print("We\tare\trenrenpython")
# 加上r防止转意后
print(r"We\tare\trenrenpython")
\是一个特殊符符号,用来转意一些字符,如\n换行符
使用了 r 后"\t"就是字符串"\t", 而不是tab
然后又有新的问题来了,想"\w"," . ", " * "都被用作了正则表达式的修饰符,如果我们需要把它们当原本的字符匹配怎么办呢?使用" \"
[html] view plain copy
print?
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import re
str1 = "python . renren"
str2 = "python : renren"
# 由于"." 是代表任何字符,所以下面表达式str1,str2都能匹配到
r = re.match('.* . .*', str1)
if r:
print r.group()
else:
print "未匹配"
r = re.match('.* . .*', str2)
if r:
print r.group()
else:
print "未匹配"
print "\n"
# 如果我们要匹配的是"."这个字符呢?
r = re.match('.* \. .*', str1)
if r:
print r.group()
else:
print "未匹配"
r = re.match('.* \. .*', str2)
if r:
print r.group()
else:
print "未匹配"
延伸一:Nan
[python] view plain copy
print?
def isnotNaN(num):
return num == num
数据分析咨询请扫描二维码
若不方便扫码,搜微信号:CDAshujufenxi
【核心关键词】软件、洞察力、大数据、产品、经验、硬件、流量、创新、决策、数据安全、网络安全、数据分析、决策制定、数据挖 ...
2026-06-18在方案选型、效果复盘、产品评估、供应商筛选等各类业务决策场景中,仅凭单一指标下结论往往会陷入 “以偏概全” 的误区。多维度 ...
2026-06-18 很多数据分析师精通Excel单元格操作,但当被问到“表结构数据的基本处理单位是什么”“字段和记录的本质区别”“为什么表结 ...
2026-06-18在数据分析、用户运营与业务增长的工作体系中,漏斗拆解是最基础也最高频的问题定位方法。很多业务场景下,我们只能看到最终的转 ...
2026-06-17在数据库开发、数据清洗与报表统计场景中,数值类型转换为日期是高频刚需操作。业务系统常以 Unix 时间戳、整型日期(如20240617 ...
2026-06-17 数据分析师八成以上的时间在和数据表格打交道,但许多人拿到Excel后习惯性地先算、先分析,结果回头发现漏了一列关键数据, ...
2026-06-17【核心关键词】数据库、电商、知识、产品、数据产品、监管业务、产品经理、业务系统、用户行为分析、用户分析、数据分析、电商 ...
2026-06-16在 Python 动态类型与面向对象的编程体系中,变量定义与类实例化是构建代码逻辑的两大核心基石。变量是数据存储、传递与运算的基 ...
2026-06-16 很多数据分析师每天与Excel打交道,但当被问到“表格结构数据和表结构数据有什么区别”“数据类型误判会引发哪些分析错误” ...
2026-06-16在 MySQL 查询性能优化体系中,索引是降低查询耗时、提升数据库吞吐的核心手段。其中联合索引与覆盖索引是实际开发中最高频的两 ...
2026-06-15在数据仓库建设与商业智能分析体系中,维度建模是应用最广泛的建模方法论,而事实表与维度表是维度建模的两大核心构件,共同构成 ...
2026-06-15 很多数据分析师能熟练计算指标,但当被问到“这家企业的核心业务目标是什么”“如何把模糊的战略目标拆解为可量化的指标”“ ...
2026-06-15在数据分析、业务监控、运营复盘等场景中,列值趋势计算是核心需求之一。无论是分析销售额的月度增长、用户活跃的变化趋势、库存 ...
2026-06-12在数字经济深度渗透的当下,消费者的购买行为已从过去的 “被动接受” 转变为 “主动决策”。流量红利消退、获客成本攀升、用户 ...
2026-06-12CDA三级认证是三个级别中的塔尖,全面考察数据战略、团队领导和复杂项目的综合能力。它所对应的《敏捷数据挖掘》教材,不再局限 ...
2026-06-12在游戏产业的商业逻辑中,付费玩家是支撑游戏生存与发展的核心支柱。行业普遍遵循 “二八定律”:20% 的付费玩家贡献了游戏 80% ...
2026-06-11【核心关键词】企业、定位、传统、产品、互联网、可视化、业务侧、数字化、结构化、数据分析、传统制造业、市场状态、发展空间 ...
2026-06-11 解读《CDA二级教材:量化策略分析(2025)》的全景结构与学习逻辑 ” CDA二级认证是企业招聘数据分析师时最常提及的证书门槛 ...
2026-06-11【核心关键词】药企、可视化、营销、分类、数据分析师、销售数据、业务人员、指导方向、分析报告、营销数据、营销医生 【专访摘 ...
2026-06-10在统计学分析、问卷调研、实验验证、业务复盘等场景中,卡方检验与 T 检验是应用最广泛的两类基础假设检验方法。前者专门处理分 ...
2026-06-10