<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          詳解16個pandas函數(shù),讓你的 “數(shù)據(jù)清洗” 能力提高100倍!

          共 3031字,需瀏覽 7分鐘

           ·

          2021-04-04 02:27


          本文介紹

          你有沒有這樣一種感覺,為什么到自己手上的數(shù)據(jù),總是亂七八糟?
          作為一個數(shù)據(jù)分析師來說,數(shù)據(jù)清洗是必不可少的環(huán)節(jié)。有時候由于數(shù)據(jù)太亂,往往需要花費我們很多時間去處理它。因此掌握更多的數(shù)據(jù)清洗方法,會讓你的能力調(diào)高100倍。
          本文基于此,講述pandas中超級好用的str矢量化字符串函數(shù),學(xué)了之后,瞬間感覺自己的數(shù)據(jù)清洗能力提高了。

          1個數(shù)據(jù)集,16個Pandas函數(shù)

          數(shù)據(jù)集是黃同學(xué)精心為大家編造,只為了幫助大家學(xué)習(xí)到知識。數(shù)據(jù)集如下:
          import pandas as pd

          df ={'姓名':[' 黃同學(xué)','黃至尊','黃老邪 ','陳大美','孫尚香'],
               '英文名':['Huang tong_xue','huang zhi_zun','Huang Lao_xie','Chen Da_mei','sun shang_xiang'],
               '性別':['男','women','men','女','男'],
               '身份證':['463895200003128433','429475199912122345','420934199110102311','431085200005230122','420953199509082345'],
               '身高':['mid:175_good','low:165_bad','low:159_bad','high:180_verygood','low:172_bad'],
               '家庭住址':['湖北廣水','河南信陽','廣西桂林','湖北孝感','廣東廣州'],
               '電話號碼':['13434813546','19748672895','16728613064','14561586431','19384683910'],
               '收入':['1.1萬','8.5千','0.9萬','6.5千','2.0萬']}
          df = pd.DataFrame(df)
          df
          結(jié)果如下:
          觀察上述數(shù)據(jù),數(shù)據(jù)集是亂的。接下來,我們就用16個Pandas來對上述數(shù)據(jù),進(jìn)行數(shù)據(jù)清洗。
          ① cat函數(shù):用于字符串的拼接
          df["姓名"].str.cat(df["家庭住址"],sep='-'*3)
          結(jié)果如下:
          ② contains:判斷某個字符串是否包含給定字符
          df["家庭住址"].str.contains("廣")
          結(jié)果如下:
          ③ startswith/endswith:判斷某個字符串是否以…開頭/結(jié)尾
          # 第一個行的“ 黃偉”是以空格開頭的
          df["姓名"].str.startswith("黃"
          df["英文名"].str.endswith("e")
          結(jié)果如下:
          ④ count:計算給定字符在字符串中出現(xiàn)的次數(shù)
          df["電話號碼"].str.count("3")
          結(jié)果如下:
          ⑤ get:獲取指定位置的字符串
          df["姓名"].str.get(-1)
          df["身高"].str.split(":")
          df["身高"].str.split(":").str.get(0)
          結(jié)果如下:
          ⑥ len:計算字符串長度
          df["性別"].str.len()
          結(jié)果如下:
          ⑦ upper/lower:英文大小寫轉(zhuǎn)換
          df["英文名"].str.upper()
          df["英文名"].str.lower()
          結(jié)果如下:
          ⑧ pad+side參數(shù)/center:在字符串的左邊、右邊或左右兩邊添加給定字符
          df["家庭住址"].str.pad(10,fillchar="*")      # 相當(dāng)于ljust()
          df["家庭住址"].str.pad(10,side="right",fillchar="*")    # 相當(dāng)于rjust()
          df["家庭住址"].str.center(10,fillchar="*")
          結(jié)果如下:
          ⑨ repeat:重復(fù)字符串幾次
          df["性別"].str.repeat(3)
          結(jié)果如下:
          ⑩ slice_replace:使用給定的字符串,替換指定的位置的字符
          df["電話號碼"].str.slice_replace(4,8,"*"*4)
          結(jié)果如下:
          ? replace:將指定位置的字符,替換為給定的字符串
          df["身高"].str.replace(":","-")
          結(jié)果如下:
          ? replace:將指定位置的字符,替換為給定的字符串(接受正則表達(dá)式)
          • replace中傳入正則表達(dá)式,才叫好用;
          • 先不要管下面這個案例有沒有用,你只需要知道,使用正則做數(shù)據(jù)清洗多好用;
          df["收入"].str.replace("\d+\.\d+","正則")
          結(jié)果如下:
          ? split方法+expand參數(shù):搭配join方法功能很強(qiáng)大
          # 普通用法
          df["身高"].str.split(":")
          # split方法,搭配expand參數(shù)
          df[["身高描述","final身高"]] = df["身高"].str.split(":",expand=True)
          df
          # split方法搭配join方法
          df["身高"].str.split(":").str.join("?"*5)
          結(jié)果如下:
          ? strip/rstrip/lstrip:去除空白符、換行符
          df["姓名"].str.len()
          df["姓名"] = df["姓名"].str.strip()
          df["姓名"].str.len()
          結(jié)果如下:
          ? findall:利用正則表達(dá)式,去字符串中匹配,返回查找結(jié)果的列表
          • findall使用正則表達(dá)式,做數(shù)據(jù)清洗,真的很香!
          df["身高"]
          df["身高"].str.findall("[a-zA-Z]+")
          結(jié)果如下:
          ? extract/extractall:接受正則表達(dá)式,抽取匹配的字符串(一定要加上括號)
          df["身高"].str.extract("([a-zA-Z]+)")
          # extractall提取得到復(fù)合索引
          df["身高"].str.extractall("([a-zA-Z]+)")
          # extract搭配expand參數(shù)
          df["身高"].str.extract("([a-zA-Z]+).*?([a-zA-Z]+)",expand=True)
          結(jié)果如下:

          今天的文章,就講述到這里,希望能夠?qū)δ阌兴鶐椭?/span>

          瀏覽 44
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美大鸡巴在线 | 韩国三级久久 | 亚洲综合免费观看 | 国产婷婷激情综合 | 最新国产AV |