
一句python,一句R︱python中的字符串操作、中文亂碼、NaN情況
先學(xué)了R,最近剛剛上手Python,所以想著將python和R結(jié)合起來互相對(duì)比來更好理解python。最好就是一句python,對(duì)應(yīng)寫一句R。
pandas可謂如雷貫耳,數(shù)據(jù)處理神器。
以下符號(hào):
=R=
代表著在R中代碼是怎么樣的。
————————————————————————————————————————————
字符編碼
encode 和 decode
Python2 默認(rèn)的編碼是 ascii,通過 encode 可以將對(duì)象的編碼轉(zhuǎn)換為指定編碼格式(稱作“編碼”),而 decode 是這個(gè)過程的逆過程(稱作“解碼”)。
decode,將字節(jié)串轉(zhuǎn)變?yōu)樽址?,并且這個(gè)字符串是按照 unicode 編碼的。在 unicode 編碼中,一個(gè)漢字對(duì)應(yīng)一個(gè)字符,這時(shí)候度量它的長(zhǎng)度就是 1.
encode,一個(gè) unicode 編碼的字符串,也可以轉(zhuǎn)換為字節(jié)串。
[html] view plain copy
print?
>>> a = "中"
>>> a
'\xe4\xb8\xad'
>>> b = a.decode()
>>> b
u'\u4e2d'
其中,a就是ASCII格式的編碼,字節(jié)串;b就是unicode編碼的字符串。當(dāng)然有一個(gè)問題就是最后出來的還不是漢字。。。(醉!)
————————————————————————————————————————————
一、字符形成、展示、拼接、切片
1、字符形成=R=paste
雙引號(hào)包裹單引號(hào)
[html] view plain copy
print?
>>> "What's your name?"
"What's your name?"
單引號(hào)使用轉(zhuǎn)義符
[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有點(diǎn)交互關(guān)系,具體看案例,直接鍵入name就可以獲得你輸入的內(nèi)容。
[html] view plain copy
print?
>>> print("hello, world")
hello, world
3、字符切片、選擇、截取 =R=無
字符可以像一般的數(shù)據(jù)格式一樣進(jìn)行切片選擇,有點(diǎn)像series:
[html] view plain copy
print?
>>> lang = "study Python"
>>> lang[0]
's'
>>> lang[2:9]
'udy pyt'
當(dāng)然也包括lang[:]可以選中所有的。
其中index代表著某個(gè)字符的索引值。
[html] view plain copy
print?
lang.index("p")
4、內(nèi)存編號(hào) =R= 無
這個(gè)與R中不一樣,當(dāng)數(shù)據(jù)存入python之后,機(jī)器會(huì)自動(dòng)給存入內(nèi)存的數(shù)據(jù)編號(hào),這個(gè)編號(hào)可以用id來查看。
[html] view plain copy
print?
>>> id(c)
3071934536L
>>> id(lang)
3071934536L
5、ASCII 值(是十進(jìn)制的)
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 兩個(gè)字符的ASCII值的大小,返回值為1,0,-1
[html] view plain copy
print?
>>> max(str1)
'd'
>>> max(str2)
'e'
>>> min(str1)
'a'
返回字符的ASCII值的最大值。
————————————————————————————————————————————
二、字符串基本操作
1、字符串重復(fù) =R=rep
[html] view plain copy
print?
>>> str1*3
'abcdabcdabcd'
其中變成字符串有兩種方式:一種是str()或者是用單引號(hào)來表示。
2、字符串拼接
(1)+ 號(hào) =R= paste
[html] view plain copy
print?
>>> "Py" + "thon"
'Python'
>>> a = 1989
>>> b = "free"
>>> print b+“a”
>>> print b+str(a)
其中變成字符串有兩種方式:一種是str()或者是用單引號(hào)來表示。
乘法,就是重復(fù)那個(gè)字符串的含義。
(2)join =R= paste
用 . 來填補(bǔ)間隔中的內(nèi)容。
3、語句分割split =R= split
這個(gè)函數(shù)的作用是將字符串根據(jù)某個(gè)分割符進(jìn)行分割。
[html] view plain copy
print?
>>> a = "I LOVE PYTHON"
>>> a.split(" ")
['I', 'LOVE', 'PYTHON']
其中split(“ ”)括號(hào)中,代表著依據(jù)什么樣式來進(jìn)行分割。
4、字符串去掉空格 = R=grep
方法是:
S.strip() 去掉字符串的左右空格
S.lstrip() 去掉字符串的左邊空格
S.rstrip() 去掉字符串的右邊空格
[html] view plain copy
print?
>>> b=" hello " # 兩邊有空格
>>> b.strip()
'hello'
5、字符串大小寫
在 Python 中有下面一堆內(nèi)建函數(shù),用來實(shí)現(xiàn)各種類型的大小寫轉(zhuǎn)化
S.upper() #S 中的字母大寫
S.lower() #S 中的字母小寫
S.capitalize() # 首字母大寫
S.isupper() #S 中的字母是否全是大寫
S.islower() #S 中的字母是否全是小寫
S.istitle()
S.title() #把所有的單詞的第一個(gè)字母轉(zhuǎn)化為大寫
S.istitle() #判斷每個(gè)單詞的第一個(gè)字母是否為大寫
6、in 包含關(guān)系 =R=%in%
類似集合計(jì)算,a in b代表a是否包含在b中,返回的是布爾值。
[html] view plain copy
print?
>>> "a" in str1
True
>>> "de" in str1
False
>>> "de" in str2
True
7、字符長(zhǎng)度len =R= length
[html] view plain copy
print?
>>> a="hello"
>>> len(a)
5
————————————————————————————————————————————
三、轉(zhuǎn)義符、占用符列表
1、轉(zhuǎn)義符列表
在字符串中,有時(shí)需要輸入一些特殊的符號(hào),但是,某些符號(hào)不能直接輸出,就需要用轉(zhuǎn)義符。所謂轉(zhuǎn)義,就是不采用符號(hào)本來的含義,而采用另外一含義了。下面表格中列出常用的轉(zhuǎn)義符:
轉(zhuǎn)義字符 描述
\ (在行尾時(shí)) 續(xù)行符
\ 反斜杠符號(hào)
\' 單引號(hào)
\" 雙引號(hào)
\a 響鈴
\b 退格(Backspace)
\e 轉(zhuǎn)義
\000 空
\n 換行
\v 縱向制表符
\t 橫向制表符
\r 回車
\f 換頁
\oyy 八進(jìn)制數(shù),yy 代表的字符,例如:\o12 代表換行
\xyy 十六進(jìn)制數(shù),yy 代表的字符,例如:\x0a 代表換行
\other 其它的字符以普通格式輸出
以上所有轉(zhuǎn)義符,都可以通過交互模式下 print 來測(cè)試一下,感受實(shí)際上是什么樣子的。
2、占位符
占位符在自動(dòng)生成字符內(nèi)容方面有很好的應(yīng)用:
[html] view plain copy
print?
>>> print "我%s喜歡NLP" % "非常"
我非常喜歡NLP
(1)老式占位符%s
另外,不同的占位符,會(huì)表示那個(gè)位置應(yīng)該被不同類型的對(duì)象填充。下面列出許多,供參考。不過,不用記憶,常用的只有 %s 和 %d,或者再加上 %f,其它的如果需要了,到這里來查即可。
(2)新式{}
[html] view plain copy
print?
>>> print "我{}喜歡NLP" .format("非常")
我非常喜歡NLP
Python 非常提倡的 string.format()的格式化方法,其中 {} 作為占位符。
這種方法真的是非常好,而且非常簡(jiǎn)單,只需要將對(duì)應(yīng)的東西,按照順序在 format 后面的括號(hào)中排列好,分別對(duì)應(yīng)占位符 {} 即可。我喜歡的方法。
四、Python 中如何避免中文是亂碼
這個(gè)問題是一個(gè)具有很強(qiáng)操作性的問題。我這里有一個(gè)經(jīng)驗(yàn)總結(jié),分享一下,供參考:
首先,提倡使用 utf-8 編碼方案,因?yàn)樗缙脚_(tái)不錯(cuò)。
經(jīng)驗(yàn)一:在開頭聲明:
# -*- coding: utf-8 -*-
有朋友問我-*-有什么作用,那個(gè)就是為了好看,愛美之心人皆有,更何況程序員?當(dāng)然,也可以寫成:
# coding:utf-8
經(jīng)驗(yàn)二:遇到字符(節(jié))串,立刻轉(zhuǎn)化為 unicode,不要用 str(),直接使用 unicode()
unicode_str = unicode('中文', encoding='utf-8')
print unicode_str.encode('utf-8')
經(jīng)驗(yàn)三:如果對(duì)文件操作,打開文件的時(shí)候,最好用 codecs.open,替代 open(這個(gè)后面會(huì)講到,先放在這里)
import codecs
codecs.open('filename', encoding='utf8')
五、Python正則表達(dá)式:re的match方法(來源公眾號(hào)人人可以學(xué)python)
Python 從1.5版本起添加了模塊re ,提供 Perl 風(fēng)格的正則表達(dá)式模式
我們經(jīng)常用的有re.match( ), re.search( ),re.sub( ), 下面我們一個(gè)一個(gè)來講一下。
其中注意它們各自的區(qū)別
re.match( )
match( )從要匹配的字符串的起始位置開始匹配一個(gè)正則表達(dá)式。如果起始位置匹配失敗,則返回None
re.match(pattern, string, flags=0)
參數(shù):
pattern: 正則表達(dá)式
string:要匹配的字符串
flags:標(biāo)志位,用來控制匹配模式
[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
第一個(gè)由于一開始匹配不成功,所以結(jié)果是None
第二個(gè)在字符串開始就找到了“Allen”所以匹配成功,返回結(jié)果
第三個(gè)," . "表示任何字符,“ * ”表示前面一個(gè)修飾符有任何個(gè)(包括0個(gè))
所以" .* "就是匹配任何個(gè)數(shù)的任何字符的意思。
[html] view plain copy
print?
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import re
str1 = "Allen is renren python"
r = re.match('Allen', str1)
# span是返回我們匹配到的字符串的開始和結(jié)束的下標(biāo)
print r.span()
# group返回我們匹配到的字符串
print r.group()
print "\n"
r = re.match('.*renren.*', str1)
print r.span()
print r.group()
數(shù)字匹配可以使用\w或者[0-9]
比如要匹配字符串"Jack age:18,sex:m"中的數(shù)字
[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)
你會(huì)發(fā)現(xiàn)我們?cè)?a href='/map/zhengzebiaodashi/' style='color:#000;font-size:inherit;'>正則表達(dá)式中使用()就能分組匹配,然后可以使用group返回每個(gè)括號(hào)中匹配的字符串。
注意: 在re.match(r'(.*):([0-9]+).*', str1)的表達(dá)式前面我們使用了一個(gè) r, r是防止字符串轉(zhuǎn)意,因?yàn)槲覀兪褂昧耍ǎ?我們不希望它被當(dāng)作要匹配的字符。
附:那這就先講一下轉(zhuǎn)意:
[html] view plain copy
print?
#!/usr/bin/python
# -*- coding: UTF-8 -*-
# 大家都知道\n是換行符,
# 而\t 是tab空格,相當(dāng)于我們鍵盤的tab鍵
print("We\tare\trenrenpython")
# 加上r防止轉(zhuǎn)意后
print(r"We\tare\trenrenpython")
\是一個(gè)特殊符符號(hào),用來轉(zhuǎn)意一些字符,如\n換行符
使用了 r 后"\t"就是字符串"\t", 而不是tab
然后又有新的問題來了,想"\w"," . ", " * "都被用作了正則表達(dá)式的修飾符,如果我們需要把它們當(dāng)原本的字符匹配怎么辦呢?使用" \"
[html] view plain copy
print?
#!/usr/bin/python
# -*- coding: UTF-8 -*-
import re
str1 = "python . renren"
str2 = "python : renren"
# 由于"." 是代表任何字符,所以下面表達(dá)式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"
# 如果我們要匹配的是"."這個(gè)字符呢?
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
數(shù)據(jù)分析咨詢請(qǐng)掃描二維碼
若不方便掃碼,搜微信號(hào):CDAshujufenxi
LSTM 模型輸入長(zhǎng)度選擇技巧:提升序列建模效能的關(guān)鍵? 在循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)家族中,長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)憑借其解決長(zhǎng)序列 ...
2025-07-11CDA 數(shù)據(jù)分析師報(bào)考條件詳解與準(zhǔn)備指南? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代浪潮下,CDA 數(shù)據(jù)分析師認(rèn)證愈發(fā)受到矚目,成為眾多有志投身數(shù) ...
2025-07-11數(shù)據(jù)透視表中兩列相乘合計(jì)的實(shí)用指南? 在數(shù)據(jù)分析的日常工作中,數(shù)據(jù)透視表憑借其強(qiáng)大的數(shù)據(jù)匯總和分析功能,成為了 Excel 用戶 ...
2025-07-11尊敬的考生: 您好! 我們誠(chéng)摯通知您,CDA Level I和 Level II考試大綱將于 2025年7月25日 實(shí)施重大更新。 此次更新旨在確保認(rèn) ...
2025-07-10BI 大數(shù)據(jù)分析師:連接數(shù)據(jù)與業(yè)務(wù)的價(jià)值轉(zhuǎn)化者? ? 在大數(shù)據(jù)與商業(yè)智能(Business Intelligence,簡(jiǎn)稱 BI)深度融合的時(shí)代,BI ...
2025-07-10SQL 在預(yù)測(cè)分析中的應(yīng)用:從數(shù)據(jù)查詢到趨勢(shì)預(yù)判? ? 在數(shù)據(jù)驅(qū)動(dòng)決策的時(shí)代,預(yù)測(cè)分析作為挖掘數(shù)據(jù)潛在價(jià)值的核心手段,正被廣泛 ...
2025-07-10數(shù)據(jù)查詢結(jié)束后:分析師的收尾工作與價(jià)值深化? ? 在數(shù)據(jù)分析的全流程中,“query end”(查詢結(jié)束)并非工作的終點(diǎn),而是將數(shù) ...
2025-07-10CDA 數(shù)據(jù)分析師考試:從報(bào)考到取證的全攻略? 在數(shù)字經(jīng)濟(jì)蓬勃發(fā)展的今天,數(shù)據(jù)分析師已成為各行業(yè)爭(zhēng)搶的核心人才,而 CDA(Certi ...
2025-07-09【CDA干貨】單樣本趨勢(shì)性檢驗(yàn):捕捉數(shù)據(jù)背后的時(shí)間軌跡? 在數(shù)據(jù)分析的版圖中,單樣本趨勢(shì)性檢驗(yàn)如同一位耐心的偵探,專注于從單 ...
2025-07-09year_month數(shù)據(jù)類型:時(shí)間維度的精準(zhǔn)切片? ? 在數(shù)據(jù)的世界里,時(shí)間是最不可或缺的維度之一,而year_month數(shù)據(jù)類型就像一把精準(zhǔn) ...
2025-07-09CDA 備考干貨:Python 在數(shù)據(jù)分析中的核心應(yīng)用與實(shí)戰(zhàn)技巧? ? 在 CDA 數(shù)據(jù)分析師認(rèn)證考試中,Python 作為數(shù)據(jù)處理與分析的核心 ...
2025-07-08SPSS 中的 Mann-Kendall 檢驗(yàn):數(shù)據(jù)趨勢(shì)與突變分析的有力工具? ? ? 在數(shù)據(jù)分析的廣袤領(lǐng)域中,準(zhǔn)確捕捉數(shù)據(jù)的趨勢(shì)變化以及識(shí)別 ...
2025-07-08備戰(zhàn) CDA 數(shù)據(jù)分析師考試:需要多久?如何規(guī)劃? CDA(Certified Data Analyst)數(shù)據(jù)分析師認(rèn)證作為國(guó)內(nèi)權(quán)威的數(shù)據(jù)分析能力認(rèn)證 ...
2025-07-08LSTM 輸出不確定的成因、影響與應(yīng)對(duì)策略? 長(zhǎng)短期記憶網(wǎng)絡(luò)(LSTM)作為循環(huán)神經(jīng)網(wǎng)絡(luò)(RNN)的一種變體,憑借獨(dú)特的門控機(jī)制,在 ...
2025-07-07統(tǒng)計(jì)學(xué)方法在市場(chǎng)調(diào)研數(shù)據(jù)中的深度應(yīng)用? 市場(chǎng)調(diào)研是企業(yè)洞察市場(chǎng)動(dòng)態(tài)、了解消費(fèi)者需求的重要途徑,而統(tǒng)計(jì)學(xué)方法則是市場(chǎng)調(diào)研數(shù) ...
2025-07-07CDA數(shù)據(jù)分析師證書考試全攻略? 在數(shù)字化浪潮席卷全球的當(dāng)下,數(shù)據(jù)已成為企業(yè)決策、行業(yè)發(fā)展的核心驅(qū)動(dòng)力,數(shù)據(jù)分析師也因此成為 ...
2025-07-07剖析 CDA 數(shù)據(jù)分析師考試題型:解鎖高效備考與答題策略? CDA(Certified Data Analyst)數(shù)據(jù)分析師考試作為衡量數(shù)據(jù)專業(yè)能力的 ...
2025-07-04SQL Server 字符串截取轉(zhuǎn)日期:解鎖數(shù)據(jù)處理的關(guān)鍵技能? 在數(shù)據(jù)處理與分析工作中,數(shù)據(jù)格式的規(guī)范性是保證后續(xù)分析準(zhǔn)確性的基礎(chǔ) ...
2025-07-04CDA 數(shù)據(jù)分析師視角:從數(shù)據(jù)迷霧中探尋商業(yè)真相? 在數(shù)字化浪潮席卷全球的今天,數(shù)據(jù)已成為企業(yè)決策的核心驅(qū)動(dòng)力,CDA(Certifie ...
2025-07-04CDA 數(shù)據(jù)分析師:開啟數(shù)據(jù)職業(yè)發(fā)展新征程? ? 在數(shù)據(jù)成為核心生產(chǎn)要素的今天,數(shù)據(jù)分析師的職業(yè)價(jià)值愈發(fā)凸顯。CDA(Certified D ...
2025-07-03