HTTP 下載檔案的一些記錄
阿新 • • 發佈:2021-07-15
Pandas
0 重要概念
pandas 核心物件就是Dataframe和Series,前者簡稱df,就是excel那樣的資料,二維的。Series就是excel的一列,df由多個Series構成。
1.檔案讀取
df=pd.read_csv(file_path,sep=',',header,names,index_col,usecols,) 常用引數:file_path 就是路徑 sep 預設為, header 頭 類似於excel的第一行 names 當header=None,可以設定頭,['a','b','c'] index_col 有時候檔案自帶行索引,不需pandas提供 usecols 需要用到的那些列,['a','c'] skiprows 跳過哪一行,捨棄掉 # 其他檔案格式大差不差
我們也可以使用 to_csv() 方法將 DataFrame 儲存為 csv 檔案
1.1 檢視df的一般資訊
df.head(n) # n為int 表示讀前幾行
df.tail(n) # 表示讀後幾行
df.info() # 檢視資料的屬性 有沒有缺失值
2.Series
2.0 Series簡介
Series 就是可以理解為dataframe的一列,他的索引是可以設定的,可以理解為key:value
2.1 Series 建立
pd.Series(data:資料,index:"索引",dtype:"型別",name:"名稱") s1 = pd.Series(data=[i for i in range(10)], index=[f'{i}a' for i in range(10)]) print(s1['1a']) # 為 1 可以根據索引直接取出來 data 也可以是字典 data = {f'{i}a':i for i in range(10)} # 和上面是樣的
2.2 Series 屬性
series.index # 系列的索引
series.values # 系列的值
series.name # 頭標籤,類似於excel的第一行
series.hasnan # 是否有nan值
2.3 Series 資料訪問
s1 = Pd.Series(data={f'{i}a':i for i in range(10)})
s1[0],s1[[1,2,3]],s1[1:3], # 內建索引
s1[['1a','2a']] # 我們自己設定的索引
2.4 Series 部分函式使用
series.astype(dtype) # 將series型別轉成dtype dataframe df.astype({"col":dtype}) series.convert_dtypes() # 自動轉成便於計算的型別 series.apply(func) # 每一行應用方法 series.map({k:v}) # 把k對映成v,沒有對映到的為NAN series.agg(['min','max']) series.groupby() # ser.groupby(["a", "b", "a", "b"]).mean() # ser.groupby(level=0).mean() # ser.groupby(ser > 100).mean() series.describe() # 描述資訊
3 . Dataframe
3.1 Dataframe建立
1. 列表建立
pd.Dataframe([['Google',10],['Runoob',12],['Wiki',13]])
2. 字典建立1
data = {'Site':['Google', 'Runoob', 'Wiki'], 'Age':[10, 12, 13]}
pd.Dataframe(data = data)
3. 字典建立2
data = [{'a': 1, 'b': 2},{'a': 5, 'b': 10, 'c': 20}]
pd.Dataframe(data = data)
3.2 Dataframe 屬性
df.index
df.columns
df.values # [ [一行行資料],[一行行資料] ]
df.memory_usage() # 記憶體使用資訊
df.ndim # 幾個維度的
3.3 Dataframe 轉換
1. df.astype
df.astype('int32')
df.astype({'col1': 'int32'}).dtypes
2. convert_dtypes # 將python 物件轉成 便於運算的
3. df.infer_objects()
3.4 行列操作curd等
3.4.1 列操作
1. 列的獲取
df['列名']
df[['col1','col2']] # 取出想要的列 df[df.columns[0:2]] 這種也行
2. 列的新增
df['新列'] = pd.Series([xxxx,xxxxx])
3. 插入
df.insert(2,'列名',allow_duplicates=False) # 第三個引數表示可不可以列名重複
4. 刪除
del(df['列名'])
df.pop('列名')
df.drop(['列名'],axis=1) # 當axis=1 刪除列 當為0 時表示刪除一行
3.4.2 行操作
1 . 取出
df.loc[['b','d']]
df.iloc[0:2]
df.loc['a':'b',"a":"e"] # 自定義索引切
df.iloc[1:3,2:5] # 自帶int索引獲取
2. 新增
df.append(df,ignore_index) #
3. 刪除
df.drop(index)
4. 定位
df['列']['索引'] # 檢視 可以修改
df['列'].iat[index]
3.5 Dataframe 一些方法
1. df.where(df>100,other=100) #大於100的保持原樣,其他的為100
2. df.mask(df>100,1000) # 大於100 的標記為1000
3. df.query('a<b') # 返回dataframe物件 和這個一樣 df[df.a < df.b]
4. df.apply(func,axis) axis=0 表示一列下都是的,axis=1表示 每一行
5. df.applymap(func) 給每一個元素,進行函式處理
6. df.groupby(['列']).agg({'age':[np.min,np.max]})
7. df.sort_values(by, axis=0, ascending=True:"升序還是降序",inplace = False:"是否就地")
ex:
df2 = pd.DataFrame({"a":['v1a','a3e',"o2q",'o4w'],'b':[ i for i in range(4)]})
df2.sort_values(by='a',key = lambda x:df2['a'].apply(lambda x:int(x[1])))
8. df.set_index('col') #把列作為索引
3.6 資料透視表
3.6.0 透視表簡介
和excel的透視表一樣,將一堆資料,按照某一列分組,計算出其他列的均值、總和、最大值等類似的值
3.6.1 pivot_table的使用
pivot_table(values=None, index=None, columns=None, aggfunc='mean', fill_value=None, margins=False, dropna=True, margins_name='All', observed=False, sort=True)
values # 要計算那種資料
index # 指的是一行一行的索引,
columns # 指的是每一個列的索引
margins # 表示是否有邊緣 彙總,
3.7 資料清洗
資料一般會存在重複值,異常值,缺失值
重複值:資料重複,可能是一行資料都一樣當作為重複,也可能事某一列重複就當作重複。
缺失值:值沒有,一般要填充,填充的值有多樣,眾數、平均等
異常值:有一些值比較怪,不符合標準。比如某個值大於三倍標準差的測定值
3.7.1 重複值
df.duplicated(subset=['列'],keep='last') # subset 預設每一行都一樣才算重複,keep表示重複的值保留哪一個,最後一個還是第一個
df.drop_duplicated(subset=['列'],keep='last') # 去除重複值,subset表示哪列一樣就算重複
3.7.2 缺失值
1. 丟棄 df.dropna( axis = 0 , how = 'any' , thresh = None , subset = None , inplace = False )
thresf: 表示要有幾個缺失才刪除
axis: 表示軸
subset: 表示依據那幾個列判斷,
inplace:表示是否修改原來的df
2. 替換 df.fillna(value=None, method=None, axis=None, inplace=False, limit=None, downcast=None)
method:表示替換的方法
limit:表示最多替換多少
value:表示把nan替換成什麼
3. 插值法
通過計算構建模型計算出這個值
3.7.3 異常值
異常值一般要通過分析,根據業務場景標準不一樣,有常見幾種方法,
1. 簡單統計量分析
2. 3σ原則,資料 - 平均值 > 3*標準差
3. 箱線圖分析方法
3.8 Dataframe 合併
3.8.1 df.append()
df.append(other, ignore_index=False, verify_integrity=False, sort=False)
other: 新增其他的df,資料一樣
3.8.2 df.compare()
df.compare(other, align_axis=1, keep_shape=False, keep_equal=False)
# 展示兩個df的不同,
3.8.3 df.join()
df.join(other, on=None, how='left', lsuffix='', rsuffix='', sort=False)
other:表示和誰合併
on:以那個為準合併
lsuffix:當df的列一樣左邊的df的列加一個字尾
3.8.4 df.merge()
df.merge(right, how='inner', on=None, left_on=None, right_on=None, left_index=False, right_index=False, sort=False, suffixes=('_x', '_y'), copy=True, indicator=False, validate=None)
永遠不要高估自己