<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
# 匯入模組 import pymysql import pandas as pd import numpy as np import time # 資料庫 from sqlalchemy import create_engine # 視覺化 import matplotlib.pyplot as plt # 如果你的裝置是配備Retina螢幕的mac,可以在jupyter notebook中,使用下面一行程式碼有效提高影象畫質 %config InlineBackend.figure_format = 'retina' # 解決 plt 中文顯示的問題 mymac plt.rcParams['font.sans-serif'] = ['Arial Unicode MS'] # 設定顯示中文 需要先安裝字型 aistudio plt.rcParams['font.sans-serif'] = ['SimHei'] # 指定預設字型 plt.rcParams['axes.unicode_minus'] = False # 用來正常顯示負號 import seaborn as sns # notebook渲染圖片 %matplotlib inline import pyecharts # 忽略版本問題 import warnings warnings.filterwarnings("ignore")
# 下載中文字型 !wget https://mydueros.cdn.bcebos.com/font/simhei.ttf # 將字型檔案複製到 matplotlib'字型路徑 !cp simhei.ttf /opt/conda/envs/python35-paddle120-env/Lib/python3,7/site-packages/matplotib/mpl-data/fonts. # 一般只需要將字型檔案複製到系統字型田錄下即可,但是在 studio上該路徑沒有寫許可權,所以此方法不能用 # !cp simhei. ttf /usr/share/fonts/ # 建立系統字型檔案路徑 !mkdir .fonts # 複製檔案到該路徑 !cp simhei.ttf .fonts/ !rm -rf .cache/matplotlib
# 資料歸一化 from sklearn.preprocessing import MinMaxScaler # kmeans聚類 from sklearn.cluster import KMeans # DBSCAN聚類 from sklearn.cluster import DBSCAN # 線性迴歸演演算法 from sklearn.linear_model import LinearRegression # 邏輯迴歸演演算法 from sklearn.linear_model import LogisticRegression # 高斯貝葉斯 from sklearn.naive_bayes import GaussianNB # 劃分訓練/測試集 from sklearn.model_selection import train_test_split # 準確度報告 from sklearn import metrics # 矩陣報告和均方誤差 from sklearn.metrics import classification_report, mean_squared_error
from sqlalchemy import create_engine engine = create_engine('mysql+pymysql://root:root@127.0.0.1:3306/ry?charset=utf8') # 查詢插入後相關表名及行數 result_query_sql = "use information_schema;" engine.execute(result_query_sql) result_query_sql = "SELECT table_name,table_rows FROM tables WHERE TABLE_NAME LIKE 'log%%' order by table_rows desc;" df_result = pd.read_sql(result_query_sql, engine)
# list轉df df_result = pd.DataFrame(pred,columns=['pred']) df_result['actual'] = test_target df_result # df取子df df_new = df_old[['col1','col2']] # dict生成df df_test = pd.DataFrame({<!-- -->'A':[0.587221, 0.135673, 0.135673, 0.135673, 0.135673], 'B':['a', 'b', 'c', 'd', 'e'], 'C':[1, 2, 3, 4, 5]}) # 指定列名 data = pd.DataFrame(dataset.data, columns=dataset.feature_names) # 使用numpy生成20個指定分佈(如標準正態分佈)的數 tem = np.random.normal(0, 1, 20) df3 = pd.DataFrame(tem) # 生成一個和df長度相同的亂數dataframe df1 = pd.DataFrame(pd.Series(np.random.randint(1, 10, 135)))
# 重新命名列 data_scaled = data_scaled.rename(columns={<!-- -->'本體油位': 'OILLV'})
# df2df df_jj2yyb['r_time'] = pd.to_datetime(df_jj2yyb['cTime']) # 新增一列根據salary將資料分為3組 bins = [0,5000, 20000, 50000] group_names = ['低', '中', '高'] df['categories'] = pd.cut(df['salary'], bins, labels=group_names)
# 檢查資料中是否含有任何缺失值 df.isnull().values.any() # 檢視每列資料缺失值情況 df.isnull().sum() # 提取某列含有空值的行 df[df['日期'].isnull()] # 輸出每列缺失值具體行數 for i in df.columns: if df[i].count() != len(df): row = df[i][df[i].isnull().values].index.tolist() print('列名:"{}", 第{}行位置有缺失值'.format(i,row)) # 眾數填充 heart_df['Thal'].fillna(heart_df['Thal'].mode(dropna=True)[0], inplace=True) # 連續值列的空值用平均值填充 dfcolumns = heart_df_encoded.columns.values.tolist() for item in dfcolumns: if heart_df_encoded[item].dtype == 'float': heart_df_encoded[item].fillna(heart_df_encoded[item].median(), inplace=True)
df_encoded = pd.get_dummies(df_data)
# 按列值替換 num_encode = {<!-- --> 'AHD': {<!-- -->'No':0, "Yes":1}, } heart_df.replace(num_encode,inplace=True)
df_jj2.drop(['coll_time', 'polar', 'conn_type', 'phase', 'id', 'Unnamed: 0'],axis=1,inplace=True)
# 取第33行資料 df.iloc[32] # 某列以xxx字串開頭 df_jj2 = df_512.loc[df_512["transformer"].str.startswith('JJ2')] df_jj2yya = df_jj2.loc[df_jj2["變壓器編號"]=='JJ2YYA'] # 提取第一列中不在第二列出現的數位 df['col1'][~df['col1'].isin(df['col2'])] # 查詢兩列值相等的行號 np.where(df.secondType == df.thirdType) # 包含字串 results = df['grammer'].str.contains("Python") # 提取列名 df.columns # 檢視某列唯一值(種類) df['education'].nunique() # 刪除重複資料 df.drop_duplicates(inplace=True) # 某列等於某值 df[df.col_name==0.587221] # df.col_name==0.587221 各行判斷結果返回值(True/False) # 檢視某列唯一值及計數 df_jj2["變壓器編號"].value_counts() # 時間段篩選 df_jj2yyb_0501_0701 = df_jj2yyb[(df_jj2yyb['r_time'] >=pd.to_datetime('20200501')) & (df_jj2yyb['r_time'] <= pd.to_datetime('20200701'))] # 數值篩選 df[(df['popularity'] > 3) & (df['popularity'] < 7)] # 某列字串擷取 df['Time'].str[0:8] # 隨機取num行 ins_1 = df.sample(n=num) # 資料去重 df.drop_duplicates(['grammer']) # 按某列排序(降序) df.sort_values("popularity",inplace=True, ascending=False) # 取某列最大值所在行 df[df['popularity'] == df['popularity'].max()] # 取某列最大num行 df.nlargest(num,'col_name') # 最大num列畫橫向柱形圖 df.nlargest(10).plot(kind='barh')
# axis=0或index表示上下移動, periods表示移動的次數,為正時向下移,為負時向上移動。 print(df.diff( periods=1, axis=‘index‘)) print(df.diff( periods=-1, axis=0)) # axis=1或columns表示左右移動,periods表示移動的次數,為正時向右移,為負時向左移動。 print(df.diff( periods=1, axis=‘columns‘)) print(df.diff( periods=-1, axis=1)) # 變化率計算 data['收盤價(元)'].pct_change() # 以5個資料作為一個資料滑動視窗,在這個5個資料上取均值 df['收盤價(元)'].rolling(5).mean()
# 刪除最後一行 df = df.drop(labels=df.shape[0]-1) # 新增一行資料['Perl',6.6] row = {<!-- -->'grammer':'Perl','popularity':6.6} df = df.append(row,ignore_index=True) # 某列小數轉百分數 df.style.format({<!-- -->'data': '{0:.2%}'.format}) # 反轉行 df.iloc[::-1, :] # 以兩列製作資料透視 pd.pivot_table(df,values=["salary","score"],index="positionId") # 同時對兩列進行計算 df[["salary","score"]].agg([np.sum,np.mean,np.min]) # 對不同列執行不同的計算 df.agg({<!-- -->"salary":np.sum,"score":np.mean})
# 時間戳轉時間字串 df_jj2['cTime'] =df_jj2['coll_time'].apply(lambda x: time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(x))) # 時間字串轉時間格式 df_jj2yyb['r_time'] = pd.to_datetime(df_jj2yyb['cTime']) # 時間格式轉時間戳 dtime = pd.to_datetime(df_jj2yyb['r_time']) v = (dtime.values - np.datetime64('1970-01-01T08:00:00Z')) / np.timedelta64(1, 'ms') df_jj2yyb['timestamp'] = v
df_jj2yyb_small_noise = df_jj2yyb_small_noise.set_index('timestamp')
fig, ax = plt.subplots() df.plot(legend=True, ax=ax) plt.legend(loc=1) plt.show()
plt.figure(figsize=(20, 6)) plt.plot(max_iter_list, accuracy, color='red', marker='o', markersize=10) plt.title('Accuracy Vs max_iter Value') plt.xlabel('max_iter Value') plt.ylabel('Accuracy')
plt.scatter(df[:, 0], df[:, 1], c="red", marker='o', label='lable0') plt.xlabel('x') plt.ylabel('y') plt.legend(loc=2) plt.show()
df = pd.Series(tree.feature_importances_, index=data.columns) # 取某列最大Num行畫橫向柱形圖 df.nlargest(10).plot(kind='barh')
df_corr = combine.corr() plt.figure(figsize=(20,20)) g=sns.heatmap(df_corr,annot=True,cmap="RdYlGn")
df #任何pandas DataFrame物件 s #任何pandas series物件
pd.read_csv(filename) # 從CSV檔案 pd.read_table(filename) # 從分隔的文字檔案(例如CSV)中 pd.read_excel(filename) # 從Excel檔案 pd.read_sql(query, connection_object) # 從SQL表/資料庫中讀取 pd.read_json(json_string) # 從JSON格式的字串,URL或檔案中讀取。 pd.read_html(url) # 解析html URL,字串或檔案,並將表提取到資料框列表 pd.read_clipboard() # 獲取剪貼簿的內容並將其傳遞給 read_table() 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格式寫入檔案
pd.DataFrame(np.random.rand(20,5)) # 5列20行隨機浮點數 pd.Series(my_list) # 從一個可迭代的序列建立一個序列 my_list df.index = pd.date_range('1900/1/30', periods=df.shape[0]) # 新增日期索引
df.head(n) # DataFrame的前n行 df.tail(n) # DataFrame的最後n行 df.shape # 行數和列數 df.info() # 索引,資料型別和記憶體資訊 df.describe() # 數值列的摘要統計資訊 s.value_counts(dropna=False) # 檢視唯一值和計數 df.apply(pd.Series.value_counts) # 所有列的唯一值和計數
使用這些命令選擇資料的特定子集。 df[col] # 返回帶有標籤col的列 df[[col1, col2]] # 返回列作為新的DataFrame s.iloc[0] # 按位元置選擇 s.loc['index_one'] # 按索引選擇 df.iloc[0,:] # 第一行 df.iloc[0,0] # 第一欄的第一元素
df.columns = ['a','b','c'] # 重新命名列 pd.isnull() # 空值檢查,返回Boolean Arrray pd.notnull() # 與pd.isnull() 相反 df.dropna() # 刪除所有包含空值的行 df.dropna(axis=1) # 刪除所有包含空值的列 df.dropna(axis=1,thresh=n) # 刪除所有具有少於n個非null值的行 df.fillna(x) # 將所有空值替換為x s.fillna(s.mean()) # 用均值替換所有空值(均值可以用統計模組中的幾乎所有函數替換 ) s.astype(float) # 將系列的資料型別轉換為float s.replace(1,'one') # 1 用 'one' s.replace([1,3],['one','three']) # 替換所有等於的值 替換為所有1 'one' ,並 3 用 'three' df.rename(columns=lambda x: x + 1) # 列的重新命名 df.rename(columns={<!-- -->'old_name': 'new_ name'})# 選擇性重新命名 df.set_index('column_one') # 更改索引 df.rename(index=lambda x: x + 1) # 大規模重新命名索引
df[df[col] > 0.5] # 列 col 大於 0.5 df[(df[col] > 0.5) & (df[col] < 0.7)] # 小於 0.7 大於0.5的行 df.sort_values(col1) # 按col1升序對值進行排序 df.sort_values(col2,ascending=False) # 按col2 降序對值進行 排序 df.sort_values([col1,col2],ascending=[True,False]) #按 col1 升序排序,然後 col2 按降序排序 df.groupby(col) #從一個欄返回GROUPBY物件 df.groupby([col1,col2]) # 返回來自多個列的groupby物件 df.groupby(col1)[col2] # 返回中的值的平均值 col2,按中的值分組 col1 (平均值可以用統計模組中的幾乎所有函數替換 ) df.pivot_table(index=col1,values=[col2,col3],aggfunc=mean) # 建立一個資料透視表組通過 col1 ,並計算平均值的 col2 和 col3 df.groupby(col1).agg(np.mean) # 在所有列中找到每個唯一col1 組的平均值 df.apply(np.mean) #np.mean() 在每列上應用該函數 df.apply(np.max,axis=1) # np.max() 在每行上應用功能
df1.append(df2) # 將df2新增 df1的末尾 (各列應相同) pd.concat([df1, df2],axis=1) # 將 df1的列新增到df2的末尾 (行應相同) df1.join(df2,on=col1,how='inner') # SQL樣式將列 df1 與 df2 行所在的列col 具有相同值的列連線起來。'how'可以是一個 'left', 'right', 'outer', 'inner'
df.describe() # 數值列的摘要統計資訊 df.mean() # 返回均值的所有列 df.corr() # 返回DataFrame中各列之間的相關性 df.count() # 返回非空值的每個資料框列中的數位 df.max() # 返回每列中的最高值 df.min() # 返回每一列中的最小值 df.median() # 返回每列的中位數 df.std() # 返回每列的標準偏差
# 匯入資料集 import pandas as pd df ={<!-- -->'姓名':[' 黃同學','黃至尊','黃老邪 ','陳大美','孫尚香'], '英文名':['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
用於字串的拼接
df["姓名"].str.cat(df["家庭住址"],sep='-'*3)
判斷某個字串是否包含給定字元
df["家庭住址"].str.contains("廣")
判斷某個字串是否以…開頭/結尾
# 第一個行的「 黃偉」是以空格開頭的 df["姓名"].str.startswith("黃") df["英文名"].str.endswith("e")
計算給定字元在字串中出現的次數
df["電話號碼"].str.count("3")
獲取指定位置的字串
df["姓名"].str.get(-1) df["身高"].str.split(":") df["身高"].str.split(":").str.get(0)
計算字串長度
df["性別"].str.len()
英文大小寫轉換
df["英文名"].str.upper() df["英文名"].str.lower()
在字串的左邊、右邊或左右兩邊新增給定字元
df["家庭住址"].str.pad(10,fillchar="*") # 相當於ljust() df["家庭住址"].str.pad(10,side="right",fillchar="*") # 相當於rjust() df["家庭住址"].str.center(10,fillchar="*")
重複字串幾次
df["性別"].str.repeat(3)
使用給定的字串,替換指定的位置的字元
df["電話號碼"].str.slice_replace(4,8,"*"*4)
將指定位置的字元,替換為給定的字串
df["身高"].str.replace(":","-")
將指定位置的字元,替換為給定的字串(接受正規表示式)
replace中傳入正規表示式,才叫好用;- 先不要管下面這個案例有沒有用,你只需要知道,使用正則做資料淨化多好用;
df["收入"].str.replace("d+.d+","正則")
搭配join方法功能很強大
# 普通用法 df["身高"].str.split(":") # split方法,搭配expand引數 df[["身高描述","final身高"]] = df["身高"].str.split(":",expand=True) df # split方法搭配join方法 df["身高"].str.split(":").str.join("?"*5)
去除空白符、換行符
df["姓名"].str.len() df["姓名"] = df["姓名"].str.strip() df["姓名"].str.len()
利用正規表示式,去字串中匹配,返回查詢結果的列表
findall使用正規表示式,做資料淨化,真的很香!
df["身高"] df["身高"].str.findall("[a-zA-Z]+")
接受正規表示式,抽取匹配的字串(一定要加上括號)
df["身高"].str.extract("([a-zA-Z]+)") # extractall提取得到複合索引 df["身高"].str.extractall("([a-zA-Z]+)") # extract搭配expand引數 df["身高"].str.extract("([a-zA-Z]+).*?([a-zA-Z]+)",expand=True
以上就是Python Pandas資料處理高頻操作詳解的詳細內容,更多關於Python Pandas資料處理的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45