1. 程式人生 > 遊戲攻略 >《原神攻略》遠呂羽氏遺事世界任務攻略

《原神攻略》遠呂羽氏遺事世界任務攻略

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)
永遠不要高估自己