<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
①將excel轉化為dataframe格式
data_file = 'Pre_results.xlsx' # Excel檔案儲存位置 D = pd.read_excel('Pre_results.xlsx') print(D)
②將excel轉化為矩陣格式
首先要說明的一點是,同一個矩陣中所有元素必須是同一型別。
例如,生成矩陣時,我們可以為矩陣指定型別dtype=str、int、float等。
# 生成一個2×2的型別為str的矩陣 import numpy as np datamatrix = np.zeros((2, 2),dtype = str) print(datamatrix)
可見,在這個矩陣中的元素都是str型別。
程式碼實戰:
首先看一下我們要處理的excel檔案的內容。
下面直接上程式碼。
import numpy as np import xlrd def import_excel_matrix(path): table = xlrd.open_workbook(path).sheets()[0] # 獲取第一個sheet表 row = table.nrows # 行數 #print(row) col = table.ncols # 列數 datamatrix = np.zeros((row, col),dtype = float) # 生成一個nrows行*ncols列的初始矩陣,在excel中,型別必須相同,否則需要自己指定dtype來強制轉換。 for i in range(col): # 對列進行遍歷 向矩陣中放入資料 #print(table.col_values(i)) #是矩陣 cols = np.matrix(table.col_values(i)) # 把list轉換為矩陣進行矩陣操作 #print(cols) #cols = float(cols) datamatrix[:, i] = cols # 按列把資料存進矩陣中 return datamatrix data_file = 'to_matrix.xlsx' # Excel檔案儲存位置 data_matrix = import_excel_matrix(data_file) print(data_matrix)
執行結果:
# 1.匯入openpyxl模組 import openpyxl # 2.呼叫Workbook()方法 wb = openpyxl.Workbook() # 3. 新建一個excel檔案,並且在單元表為"sheet1"的表中寫入資料 ws = wb.create_sheet("sheet1") # 4.在單元格中寫入資料 # ws.cell(row=m, column=n).value = *** 在第m行n列寫入***資料 ws.cell(row=1, column=1).value = "時間" ws.cell(row=1, column=2).value = "零食" ws.cell(row=1, column=3).value = "是否好吃" # 5.儲存表格 wb.save('嘿嘿.xlsx') print('儲存成功!')
import xlwt workbook=xlwt.Workbook(encoding='utf-8') booksheet=workbook.add_sheet('Sheet 1', cell_overwrite_ok=True) DATA=(('學號','姓名','年齡','性別','成績'), ('1001','A','11','男','12'), ('1002','B','12','女','22'), ('1003','C','13','女','32'), ('1004','D','14','男','52'),) for i,row in enumerate(DATA): for j,col in enumerate(row): booksheet.write(i,j,col) workbook.save('grade.xls')
只能一行一行的讀出和寫入,且矩陣形式只可以存放相同型別的資料,效率不高。
import pandas as pd df = pd.read_csv('to_df.csv') #,nrows =6) nrows=6表示唯讀取前六行資料 print(df)
df.to_csv('df_to_csv.csv')
①CSV是純文字檔案,excel不是純文字,excel包含很多格式資訊在裡面。
②CSV檔案的體積會更小,建立分發讀取更加方便,適合存放結構化資訊,比如記錄的匯出,流量統計等等。
③CSV檔案在windows平臺預設的開啟方式是excel,但是它的本質是一個文字檔案。
④csv檔案只有一個sheet,太多的表不易儲存,注意命名規範。
f=open('data.txt') print(f.read())
注意不能將DataFrame寫入txt檔案,只能寫入字串。
f = open('data.txt','w', encoding='utf-8') #開啟檔案,若檔案不存在系統自動建立 #w只能寫入操作 r只能讀取 a向檔案追加;w+可讀可寫 r+可讀可寫 a+可讀可追加;wb+寫入進位制資料 #w模式開啟檔案,如果檔案中有資料,再次寫入內容,會把原來的覆蓋掉 f.write('hello world! = %.3f' % data) #write寫入 f.writelines(['hello!n']) #writelines 將列表中的字串寫入檔案 但不會換行 引數必須是一個只存放字串的列表 f.close() #關閉檔案
save_path= 'save.txt' np.savetxt(save_path, data, fmt='%.6f')
①DataFrame是一種表格型資料結構,(每一列的資料型別可以不同,而矩陣必須相同)它含有一組有序的列,每列可以是不同的值。
②DataFrame既有行索引,也有列索引,(呼叫其值時用)它可以看作是由Series組成的字典,不過這些Series公用一個索引。
③DataFrame的建立有多種方式,可以根據dict進行建立,也可以讀取csv或者txt檔案來建立。這裡主要介紹這兩種方式。
data = { 'state':['Ohio','Ohio','Ohio','Nevada','Nevada'], 'year':[2000,2001,2002,2001,2002], 'pop':[1.5,1.7,3.6,2.4,2.9] } frame = pd.DataFrame(data) frame #輸出 pop state year 0 1.5 Ohio 2000 1 1.7 Ohio 2001 2 3.6 Ohio 2002 3 2.4 Nevada 2001 4 2.9 Nevada 2002
DataFrame的行索引是index,列索引是columns,我們可以在建立DataFrame時指定索引的值:
frame2 = pd.DataFrame(data,index=['one','two','three','four','five'],columns=['year','state','pop','debt']) frame2 #輸出 year state pop debt one 2000 Ohio 1.5 NaN two 2001 Ohio 1.7 NaN three 2002 Ohio 3.6 NaN four 2001 Nevada 2.4 NaN five 2002 Nevada 2.9 NaN
使用巢狀字典也可以建立DataFrame,此時外層字典的鍵作為列,內層鍵則作為索引:
pop = {'Nevada':{2001:2.4,2002:2.9},'Ohio':{2000:1.5,2001:1.7,2002:3.6}} frame3 = pd.DataFrame(pop) frame3 #輸出 Nevada Ohio 2000 NaN 1.5 2001 2.4 1.7 2002 2.9 3.6
我們可以用index,columns,values來存取DataFrame的行索引,列索引以及資料值,資料值返回的是一個二維的ndarray
frame2.values frame2.values[0,1]
讀取檔案生成DataFrame最常用的是read_csv,read_table方法。該方法中幾個重要的引數如下所示:
其他建立DataFrame的方式有很多,比如我們可以通過讀取mysql或者mongoDB來生成,也可以讀取json檔案等等,這裡就不再介紹。
在DataFrame的處理中經常會遇到軸的概念,這裡先給大家一個直觀的印象,我們所說的axis=0即表示沿著每一列或行標籤索引值向下執行方法,axis=1即表示沿著每一行或者列標籤模向執行對應的方法。
我們可以根據列名來選取一列,返回一個Series:
frame2['year'] #索引列名
索引多列
data = pd.DataFrame(np.arange(16).reshape((4,4)),index = ['Ohio','Colorado','Utah','New York'],columns=['one','two','three','four']) data[['two','three']]
索引多行
data[:2] #第一行和第二行 #輸出 one two three four Ohio 0 1 2 3 Colorado 4 5 6 7
索引時,如果要是用標籤,最好使用loc方法,如果使用下標,最好使用iloc方法。
data.loc['Colorado',['two','three']] #輸出 two 5 three 6 Name: Colorado, dtype: int64 data.iloc[0:3,2] #輸出 Ohio 2 Colorado 6 Utah 10 Name: three, dtype: int64
可以使用一個標量修改DataFrame中的某一列,此時這個標量會廣播到DataFrame的每一行上。
data = { 'state':['Ohio','Ohio','Ohio','Nevada','Nevada'], 'year':[2000,2001,2002,2001,2002], 'pop':[1.5,1.7,3.6,2.4,2.9] } frame2 = pd.DataFrame(data,index=['one','two','three','four','five'],columns=['year','state','pop','debt']) frame2 frame2['debt']=16.5
也可以使用一個列表來修改,不過要保證列表的長度與DataFrame長度相同:
frame2.debt = np.arange(5)
可以使用一個Series,此時會根據索引進行精確匹配:
val = pd.Series([-1.2,-1.5,-1.7],index=['two','four','five']) frame2['debt'] = val
DataFrame在進行算術運算時會進行補齊,在不重疊的部分補足NA
df1 = pd.DataFrame(np.arange(9).reshape((3,3)),columns=list('bcd'),index=['Ohio','Texas','Colorado']) df2 = pd.DataFrame(np.arange(12).reshape((4,3)),columns = list('bde'),index=['Utah','Ohio','Texas','Oregon']) df1 + df2
numpy的元素級陣列方法,也可以用於操作Pandas物件:
frame = pd.DataFrame(np.random.randn(3,3),columns=list('bcd'),index=['Ohio','Texas','Colorado']) np.abs(frame)
另一個常見的操作是,將函數應用到由各列或行所形成的一維陣列上。DataFrame的apply方法即可實現此功能。
f = lambda x:x.max() - x.min() frame.apply(f)
對於DataFrame,sort_index可以根據任意軸的索引進行排序,並指定升序降序
frame = pd.DataFrame(np.arange(8).reshape((2,4)),index=['three','one'],columns=['d','a','b','c']) frame.sort_index()
DataFrame也可以按照值進行排序:
#按照任意一列或多列進行排序 frame.sort_values(by=['a','b'])
DataFrame中的實現了sum、mean、max等方法,我們可以指定進行彙總統計的軸,同時,也可以使用describe函數檢視基本所有的統計項:
df = pd.DataFrame([[1.4,np.nan],[7.1,-4.5],[np.nan,np.nan],[0.75,-1.3]],index=['a','b','c','d'],columns=['one','two']) df.sum(axis=1) #輸出 one 9.25 two -5.80 dtype: float64 #Na會被自動排除,可以使用skipna選項來禁用該功能 df.mean(axis=1,skipna=False) #輸出 a NaN b 1.300 c NaN d -0.275 dtype: float64 #idxmax返回間接統計,是達到最大值的索引 df.idxmax() #輸出 one b two d dtype: object #describe返回的是DataFrame的彙總統計 #非數值型的與數值型的統計返回結果不同 df.describe()
DataFrame也實現了corr和cov方法來計算一個DataFrame的相關係數矩陣和協方差矩陣,同時DataFrame也可以與Series求解相關係數。
frame1 = pd.DataFrame(np.random.randn(3,3),index=list('abc'),columns=list('abc')) frame1.corr frame1.cov() #corrwith用於計算每一列與Series的相關係數 frame1.corrwith(frame1['a'])
Pandas中缺失值相關的方法主要有以下三個:
上面兩個方法返回一個新的Series或者DataFrame,對原資料沒有影響,如果想在原資料上進行直接修改,使用inplace引數:
data = pd.DataFrame([[1,6.5,3],[1,np.nan,np.nan],[np.nan,np.nan,np.nan],[np.nan,6.5,3]]) data.dropna() #輸出 0 1 2 0 1.0 6.5 3.0
對DataFrame來說,dropna方法如果發現缺失值,就會進行整行刪除,不過可以指定刪除的方式,how=all,是當整行全是na的時候才進行刪除,同時還可以指定刪除的軸。
data.dropna(how='all',axis=1,inplace=True) data #輸出 0 1 2 0 1.0 6.5 3.0 1 1.0 NaN NaN 2 NaN NaN NaN 3 NaN 6.5 3.0
DataFrame填充缺失值可以統一填充,也可以按列填充,或者指定一種填充方式:
data.fillna({1:2,2:3}) #輸出 0 1 2 0 1.0 6.5 3.0 1 1.0 2.0 3.0 2 NaN 2.0 3.0 3 NaN 6.5 3.0 data.fillna(method='ffill') #輸出 0 1 2 0 1.0 6.5 3.0 1 1.0 6.5 3.0 2 1.0 6.5 3.0 3 1.0 6.5 3.0
1、series與array型別的不同之處為series有索引,而另一個沒有;series中的資料必須是一維的,而array型別不一定
2、可以把series看成一個定長的有序字典,可以通過shape,index,values等得到series的屬性
其他檔案的操作 檔案複製操作
import shutil shutil.copyfile(dir1,dir2)
如果路徑不存在建立路徑
if not os.path.exists(datapath): os.mkdir(datapath)
檢視當前目錄下內容
import os all_files = os.listdir(os.getcwd()) print(all_files)
filenames = os.listdir(os.curdir) #獲取當前目錄中的內容 print(filenames)
到此這篇關於python讀取和儲存為excel、csv、txt檔案及對DataFrame檔案的基本操作指南的文章就介紹到這了,更多相關python讀取儲存為excel、csv、txt檔案內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援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