資料結構
整體上劃分pandas有兩種資料結構,series(一維的)和dataframe(二維的)
dataframe的建立:可以使用以下建構函式建立 -pandas.dataframe( data, index, columns, dtype, copy)
包匯入:
一般我們需要做如下匯入,numpy和pandas一般需要聯合使用,並且最好匯入的順序是pandas先導入,不然有時候會報錯(為啥報錯還有待研究):
import pandas as pd
inport numpy as np
資料匯入:pd.read_csv(filename):從csv檔案匯入資料
pd.read_table(filename):從限定分隔符的文字檔案匯入資料
pd.read_excel(filename):從excel檔案匯入資料
pd.read_sql(query, connection_object):從sql表/庫匯入資料
pd.read_json(json_string):從json格式的字串匯入資料
pd.read_html(url):解析url、字串或者html檔案
pd.read_clipboard():從貼上板獲取內容
pd.dataframe(dict):從字典物件匯入資料
資料匯出:
df.to_csv(filename):匯出資料到csv檔案
df.to_excel(filename):匯出資料到excel檔案
df.to_sql(table_name, connection_object):匯出資料到sql表
df.to_json(filename):以json格式匯出資料到文字檔案
資料檢視:
資料選取:
df[col]:根據列名,並以series的形式返回列-----> 例:df[『列名』]
df[[col1, col2]]:以dataframe形式返回多列
s.iloc[0]:按位置選取資料
s.loc[『index_one』]:按索引選取資料
df.iloc[0,:]:返回第一行
資料清洗:
df.columns = [『a』,『b』,『c』]:重新命名列名
pd.isnull():檢查dataframe物件中的空值,並返回乙個boolean陣列
pd.notnull():檢查dataframe物件中的非空值,並返回乙個boolean陣列
df.dropna():刪除所有包含空值的行
df.fillna(x):用x替換dataframe物件中所有的空值
s.astype(float):將series中的資料型別更改為float型別
s.replace(1,『one』):用『one』代替所有等於1的值
df.rename(columns=lambda x: x + 1):批量更改列名
df.set_index(『column_one』):更改索引列
資料處理:filter, sort, groupby
資料合併:
資料統計:
df.describe():檢視資料值列的匯**計
df.mean():返回所有列的均值
df.corr():返回列與列之間的相關係數
df.count():返回每一列中的非空值的個數
df.max():返回每一列的最大值
df.min():返回每一列的最小值
df.median():返回每一列的中位數
df.std():返回每一列的標準差
常用函式:
df.astypes: 資料格式轉換
df.value_counts:相同數值的個數統計
df.hist(): 畫直方圖
df.get_dummies: one-hot編碼,將型別格式的屬性轉換成矩陣型的屬性。比如:三種顏色rgb,紅色編碼為[1 0 0]
例項分析: 以注釋形式在**中標註了
import pandas as pd
import numpy as np
from hmmlearn import hmm
#導包#設定時間為了看函式的執行時間 優化函式
start_time = pd.datetime.now()
print(start_time)
#匯入資料,去重,過濾名字為『-』的,改日期型別
def get_hmm_df(file_name):
#讀檔案
df = pd.read_csv(file_name)
#設定列名
df.columns = ['時間','使用者全名','元件','事件']
#去重df = df[['時間','使用者全名','元件']]
df = df.drop_duplicates(subset=none, keep='last')
#元件為空的資料去掉
df = df[df['元件'].notnull()]
df = df[df['使用者全名']!='-']
df['時間'] = pd.to_datetime(df['時間'])
#建立**字典,新建事件**列
df_fact = df[['元件']]
df_fact = df_fact.drop_duplicates(subset=none, keep='last', inplace=false)
key_dic = {}
for i in range(df_fact.shape[0]):
key = df_fact.iat[i,0]
key_dic[key] = i
df.sort_values(by=['使用者全名','時間'],inplace=true)
#建立索引為人名的字典
df_name = df[['使用者全名']]
df_name = df_name.drop_duplicates(subset=none, keep='last', inplace=false)
dic = {}
#shape[0] 這塊是說上面吧使用者名稱去重了,拿到不同名的資料作為乙個資料項,張三李四等.
for i in range(df_name.shape[0]):
key = df_name.iat[i,0]
dic[key] =
#填充字典,得到結果是
# 將張三的其他你需要重複資訊填入裡邊
for i in range(1,df.shape[0]):
time_delta = df.iat[i,0]-df.iat[i-1,0]
if (time_delta.seconds <= 3600) or (df.iat[i,1] != df.iat[i-1,1]):#換人了,或者同乙個人沒過時
if time_delta.seconds > 3600 and (df.iat[i,1] == df.iat[i-1,1]):#過時了,且同乙個人
# 獲取x2和len_x
x2_bic_data = [dic[i][j] for i in dic for j in range(len(dic[i]))]
len_x = [len(i) for i in x2_bic_data]
x2 = [[j] for i in x2_bic_data for j in i]
return df,df_fact,df_name,dic,x2,len_x
finish_time = pd.datetime.now()
print(finish_time)
Pandas學習筆記 Pandas概覽(一)
pandas是python的核心資料分析支援庫,提供了快速 靈活 明確的資料結構,旨在簡單 直觀的處理關係型 資料型的資料。pandas適用於處理以下型別的資料 維數名稱描述1 series 帶標籤的一維同構陣列 2dataframe 帶標籤的,大小可變的,二維異構 pandas資料結構就像是低維資...
pandas 第一列 pandas筆記(一)
最近在學習pandas,在這裡記錄一下筆記。一 建立pandas二維陣列 import pandas as pdimport numpy as nps pd.date range 20200101 periods 6 df pd.dataframe np.random.randn 6,4 index...
pandas學習筆記(一)
series是帶有標籤的一維陣列,可以儲存任何資料型別 整數,字串,浮點數,python物件等 軸標籤統稱為索引 ar np.random.rand 5 pd.series ar,index list abcde index是為資料新增索引,用列表的形式 s pd.series ar print a...