python扫盲系列(5)--列表、元组、字典、集合
| ? | ? | 特征 | 常見用法 |
| 不可變數據 | 數字=123 | 用于計算,沒有索引;注意優(yōu)先級(**》*/》not》and》or) | >>> 17 % 3 # 取余? 2 |
| 字符串='' | Python 字符串不能被改變,可以添加索引 常用用法:+字符串,*2復制2遍 | a='string' a[0]='c' #非法 print(a[0]) #合法 print (a?* 2) ? ? ?# 輸出字符串兩次 | |
| 元組=() | 元組(tuple)與列表類似,不同之處在于元組的元素不能修改。 | tup1 = () ? ?# 空元組 tup2 = (20,) # 一個元素,需要在元素后添加逗號 | |
| 可變數據 | 列表=[] | 可以被索引,可以更改(不同于字符串),列表中元素的類型可以不相同,+,*依舊有效; | >>>a = [1, 2, 3, 4, 5, 6] >>>del a[2] #刪除列表元素 |
| 字典={} | 字典是無序的對象集合,不能通過索引,但可以通過鍵找值(鍵唯一);構造字典方法很多; | b={'adf':'www','eee':123} a={} #構造空字典 | |
| 集合={} | 集合區(qū)分其它數據類型很大一個特點就是:集合可以進行交集,差集,補集的運算。創(chuàng)建一個空集合必須用?set()?而不是?{ },因為?{ }?是用來創(chuàng)建一個空字典。 | # set可以進行集合運算 {'b', 'a', 'c', 'r', 'd'}#用{}拆分后表示 | |
| 數據類型轉換 | list() | list() 方法用于將元組,字符串,字典,集合轉換為列表 其中,字符串轉換成列表,是將字符串中的每個字符轉換成列表的一個元素。 | aTuple = (123, 'Google') 列表元素 : ?[123, 'Google'] |
| tuple() | tuple()將列表,字符串,字典,集合轉換為元組;字符串都被單一拆分開來了; | list1= ['Google', 'Taobao'] ('Google', 'Taobao') | |
| pandas | DataFrame | DataFrame是Python中Pandas庫中的一種數據結構,它類似excel,是一種二維表。 | 可由列表,字典創(chuàng)建 |
小練習:用python處理數據
數據和特征決定了機器學習的上限,而模型和算法只是逼近這個上限而已。
數據質量完整性問題:
在介紹數據清洗之前,先學會用python導入數據:
# encoding=utf-8 import pandas as pd import numpy as np df = pd.read_csv("C://Users//baihua//Desktop//ceshi.csv",encoding='utf-8') #這里要注意,如果文件中有中文,本地文件一定要轉換成 UTF-8的編碼格式 print(df)# encoding=utf-8 import pandas as pd import numpy as np from pandas import read_excel df = pd.read_excel("C://Users//baihua//Desktop//Untitled.xlsx",sheetname='2') #可以導入指定sheet表 print(df)from pandas import DataFrame df = DataFrame({'age': [21, 22, 23], 'name': ['KEN', 'John', 'JIMI'] }) df.to_csv("C://Users//baihua//Desktop//df.csv",sep=',',header=True,index=False)#index默認True,導出行序號;header默認為true,導出列名 #創(chuàng)建二維DataFrame的三種方法 df1=pd.DataFrame([[1,2,3,4],[2,3,4,5],[3,4,5,6],[4,5,6,7]],index=list('ABCD'),columns=list('ABCD')) df2=pd.DataFrame(np.random.randn(4,4),index=list('ABCD'),columns=list('ABCD')) dic1={'name':['小明','小紅','狗蛋','鐵柱'],'age':[17,20,5,40],'gender':['男','女','女','男']} df3=pd.DataFrame(dic1) print(df) print(df1) print(df2) print(df3)A B C D A 1 2 3 4 B 2 3 4 5 C 3 4 5 6 D 4 5 6 7A B C D A -0.014269 -0.336968 0.656946 0.997784 B 0.689218 0.689966 0.560216 -0.447383 C -0.488228 -0.106600 0.063934 0.733151 D -0.916339 0.166839 0.083495 0.859965name age gender 0 小明 17 男 1 小紅 20 女 2 狗蛋 5 女 3 鐵柱 40 男?完整性:單條數據是否存在空值,統計的字段是否完善。
全面性:觀察某一列的全部數值,比如在 Excel 表中,我們選中一列,可以看到該列的平均值、最大值、最小值。我們可以通過常識來判斷該列是否有問題,比如:數據定義、單位標識、數值本身。
合法性:數據的類型、內容、大小的合法性。比如數據中存在非 ASCII 字符,性別存在了未知,年齡超過了 150 歲等。
唯一性:數據是否存在重復記錄,因為數據通常來自不同渠道的匯總,重復的情況是常見的
1完整性&空行
刪除:觀看數據分布,如果缺失數據不多,就刪除數據缺失的記錄;(數據少,這種方法就不可取;或是缺失數據非隨機,刪除就可能導致數據從正態(tài)變?yōu)榉钦龖B(tài))
均值:使用當前列的均值;(數據正態(tài)分布用均值替換NA較好)
中位數:使用當前列的中位數;(數據分布由于異常值存在而不是正太分布的情況下,使用中位數效果比較好。
高頻:使用當前列出現頻率最高的數據。(容易改變數據的分布
不常用:0代替缺失值(對極端值,平均值影響較大)
相似:用k近鄰的方法,尋找相似值來替換缺失值;(缺失值填補的準確性就要看聚類結果的好壞了,而聚類變數較大)
擬合:如果缺失后數據符合回歸趨勢,那么就擬合方程測定缺失值;(缺失值連續(xù),才可以使用回歸預測,但預測方程出來了,反過去填缺失值,不是顯得白癡!
# encoding=utf-8 import pandas as pd import numpy as np df = pd.read_csv("C://Users//baihua//Desktop//ceshi.csv",encoding='utf-8') #這里要注意,如果文件中有中文,本地文件一定要轉換成 UTF-8的編碼格式 print(df) df.dropna(how='all',inplace=True) #刪除空行 print(df) df['Population'].fillna(df['Population'].mean(), inplace=True)#xx列缺失值用平均數替換 print(df) df['Population'].fillna(df['Population'].median(), inplace=True)#xx列缺失值用中位數替換 print(df) age_maxf = df['Population'].value_counts().index[0] df['Population'].fillna(age_maxf, inplace=True)#xx列缺失值用出現頻率最高的的數代替 print(df)我們發(fā)現數據中有一個空行,除了 index 之外,全部的值都是 NaN。Pandas 的 read_csv() 并沒有可選參數來忽略空行,可以通過dropna來刪除空行。python內置函數使用:變量=操作對象.函數
2. 全面性
#修改列名 # encoding=utf-8 import pandas as pd import numpy as np df = pd.read_excel("C://Users//baihua//Desktop//accountMessage.xlsx",encoding='utf-8') #這里要注意,如果文件中有中文,本地文件一定要轉換成 UTF-8的編碼格式 print(df) df.rename(columns={1:'Firstname', 2:'Lastname',3:'Age',4:'Weight'}, inplace =True)#字典的好處就是可以隨意修改列命,沒修改的默認 print(df)weight 列的數值,我們能發(fā)現 weight 列的單位不統一。有的單位是千克(kgs),有的單位是磅(lbs)。
這里我使用千克作為統一的度量單位,將磅(lbs)轉化為千克(kgs):
# encoding=utf-8 import pandas as pd import numpy as np df = pd.read_excel("C://Users//baihua//Desktop//accountMessage.xlsx",encoding='utf-8') #這里要注意,如果文件中有中文,本地文件一定要轉換成 UTF-8的編碼格式 print(df) df.rename(columns={1:'Firstname', 2:'Lastname',3:'Weight',4:'Age'}, inplace =True) print(df) # 獲取 weight 數據列中單位為 lbs 的數據 rows_with_lbs = df['Weight'].str.contains('lbs').fillna(False) print(df[rows_with_lbs]) # 將 lbs 轉換為 kgs, 2.2lbs=1kgs for i,lbs_row in df[rows_with_lbs].iterrows():Weight=int(float(lbs_row['Weight'][:-3])/2.2)## 截取從頭開始到倒數第三個字符之前,即去掉 lbs。df.at[i,'Weight'] = '{}kgs'.format(Weight) print(df)3合法性
在數據中不難發(fā)現,姓名列(Name)包含了兩個參數 Firtname 和 Lastname,我們使用 Python 的 split 方法,str.split(expand=True),將列表拆成新的列,再將原來的 Name 列刪除。
# 切分名字,刪除源數據列(切分名字實際生成了新列,新列會添加到最后) df[['first_name','last_name']] = df['name'].str.split(expand=True) df.drop('name', axis=1, inplace=True) # 刪除非 ASCII 字符 df['first_name'].replace({r'[^\x00-\x7F]+':''}, regex=True, inplace=True) df['last_name'].replace({r'[^\x00-\x7F]+':''}, regex=True, inplace=True) print(df)4唯一性
我們校驗一下數據中是否存在重復記錄。如果存在重復記錄,就使用 Pandas 提供的?drop_duplicates() 來刪除重復數據。
df.drop_duplicates(['first_name','last_name'],inplace=True) print(df)總結:數據處理很繁雜,很枯燥,這才顯得有價值啊,能輕易學會的也容易被替代!數據處理過程中,會遇到各種各樣的數據問題,需要我們靈活使用python函數,多看博客(避免重復造輪子)多思考(思考才能有進步)多敲代碼(反饋是區(qū)分無效學習的重要指標)。
最后做一個完整的數據處理練習:
# encoding=utf-8 import pandas as pd import numpy as np import re df = pd.read_excel("C://Users//baihua//Desktop//kehou.xlsx",encoding='utf-8') #這里要注意,如果文件中有中文,本地文件一定要轉換成 UTF-8的編碼格式 df['food']=df['food'].str.lower() df['ounces'].fillna(df['ounces'].median(),inplace=True) df['ounces']=df['ounces'].apply(lambda a:abs(a))#將ounces列中的負值取絕對值,lambda是匿名函數?
參考文獻:
python字符串函數
python列表函數方法
python元組函數方法
python字典函數方法
python集合函數方法
pandas中DataFrame用法
pandas中Series用法
python缺失值處理
python修改列名
對照excel學python數據處理
lambda等匿名函數
總結
以上是生活随笔為你收集整理的python扫盲系列(5)--列表、元组、字典、集合的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 如何做到自动化运营--数据驱动
- 下一篇: 支持向量机SVM算法原理