網(wǎng)站首頁 編程語言 正文
一、對excel文件的處理
1.讀取excel文件并將其內(nèi)容轉(zhuǎn)化DataFrame和矩陣形式
①將excel轉(zhuǎn)化為dataframe格式
data_file = 'Pre_results.xlsx' # Excel文件存儲(chǔ)位置
D = pd.read_excel('Pre_results.xlsx')
print(D)
②將excel轉(zhuǎn)化為矩陣格式
首先要說明的一點(diǎn)是,同一個(gè)矩陣中所有元素必須是同一類型。
例如,生成矩陣時(shí),我們可以為矩陣指定類型dtype=str、int、float等。
# 生成一個(gè)2×2的類型為str的矩陣
import numpy as np
datamatrix = np.zeros((2, 2),dtype = str)
print(datamatrix)
可見,在這個(gè)矩陣中的元素都是str類型。
代碼實(shí)戰(zhàn):
首先看一下我們要處理的excel文件的內(nèi)容。
下面直接上代碼。
import numpy as np
import xlrd
def import_excel_matrix(path):
table = xlrd.open_workbook(path).sheets()[0] # 獲取第一個(gè)sheet表
row = table.nrows # 行數(shù)
#print(row)
col = table.ncols # 列數(shù)
datamatrix = np.zeros((row, col),dtype = float) # 生成一個(gè)nrows行*ncols列的初始矩陣,在excel中,類型必須相同,否則需要自己指定dtype來強(qiáng)制轉(zhuǎn)換。
for i in range(col): # 對列進(jìn)行遍歷 向矩陣中放入數(shù)據(jù)
#print(table.col_values(i)) #是矩陣
cols = np.matrix(table.col_values(i)) # 把list轉(zhuǎn)換為矩陣進(jìn)行矩陣操作
#print(cols)
#cols = float(cols)
datamatrix[:, i] = cols # 按列把數(shù)據(jù)存進(jìn)矩陣中
return datamatrix
data_file = 'to_matrix.xlsx' # Excel文件存儲(chǔ)位置
data_matrix = import_excel_matrix(data_file)
print(data_matrix)
運(yùn)行結(jié)果:
2.將數(shù)據(jù)寫入xlsx文件
# 1.導(dǎo)入openpyxl模塊
import openpyxl
# 2.調(diào)用Workbook()方法
wb = openpyxl.Workbook()
# 3. 新建一個(gè)excel文件,并且在單元表為"sheet1"的表中寫入數(shù)據(jù)
ws = wb.create_sheet("sheet1")
# 4.在單元格中寫入數(shù)據(jù)
# ws.cell(row=m, column=n).value = *** 在第m行n列寫入***數(shù)據(jù)
ws.cell(row=1, column=1).value = "時(shí)間"
ws.cell(row=1, column=2).value = "零食"
ws.cell(row=1, column=3).value = "是否好吃"
# 5.保存表格
wb.save('嘿嘿.xlsx')
print('保存成功!')
3.將數(shù)據(jù)保存為xlsx文件
import xlwt
workbook=xlwt.Workbook(encoding='utf-8')
booksheet=workbook.add_sheet('Sheet 1', cell_overwrite_ok=True)
DATA=(('學(xué)號(hào)','姓名','年齡','性別','成績'),
('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')
4.使用excel對數(shù)據(jù)進(jìn)行處理的缺點(diǎn)
只能一行一行的讀出和寫入,且矩陣形式只可以存放相同類型的數(shù)據(jù),效率不高。
二、對csv文件的處理
1.讀取csv文件并將其內(nèi)容轉(zhuǎn)化為DataFrame形式
import pandas as pd
df = pd.read_csv('to_df.csv') #,nrows =6) nrows=6表示只讀取前六行數(shù)據(jù)
print(df)
2.將DataFrame保存為csv文件
df.to_csv('df_to_csv.csv')
3.優(yōu)缺點(diǎn)
①CSV是純文本文件,excel不是純文本,excel包含很多格式信息在里面。
②CSV文件的體積會(huì)更小,創(chuàng)建分發(fā)讀取更加方便,適合存放結(jié)構(gòu)化信息,比如記錄的導(dǎo)出,流量統(tǒng)計(jì)等等。
③CSV文件在windows平臺(tái)默認(rèn)的打開方式是excel,但是它的本質(zhì)是一個(gè)文本文件。
④csv文件只有一個(gè)sheet,太多的表不易保存,注意命名規(guī)范。
三、對txt文件的處理
1.讀取txt文件
f=open('data.txt')
print(f.read())
2.將數(shù)據(jù)寫入txt文件
注意不能將DataFrame寫入txt文件,只能寫入字符串。
f = open('data.txt','w', encoding='utf-8') #打開文件,若文件不存在系統(tǒng)自動(dòng)創(chuàng)建
#w只能寫入操作 r只能讀取 a向文件追加;w+可讀可寫 r+可讀可寫 a+可讀可追加;wb+寫入進(jìn)制數(shù)據(jù)
#w模式打開文件,如果文件中有數(shù)據(jù),再次寫入內(nèi)容,會(huì)把原來的覆蓋掉
f.write('hello world! = %.3f' % data) #write寫入
f.writelines(['hello!\n']) #writelines 將列表中的字符串寫入文件 但不會(huì)換行 參數(shù)必須是一個(gè)只存放字符串的列表
f.close() #關(guān)閉文件
3.將數(shù)據(jù)保存到txt文件
save_path= 'save.txt'
np.savetxt(save_path, data, fmt='%.6f')
四、對DataFrame文件的基本操作
1.DataFrame的創(chuàng)建
①DataFrame是一種表格型數(shù)據(jù)結(jié)構(gòu),(每一列的數(shù)據(jù)類型可以不同,而矩陣必須相同)它含有一組有序的列,每列可以是不同的值。
②DataFrame既有行索引,也有列索引,(調(diào)用其值時(shí)用)它可以看作是由Series組成的字典,不過這些Series公用一個(gè)索引。
③DataFrame的創(chuàng)建有多種方式,可以根據(jù)dict進(jìn)行創(chuàng)建,也可以讀取csv或者txt文件來創(chuàng)建。這里主要介紹這兩種方式。
1.1根據(jù)字典創(chuàng)建
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,我們可以在創(chuàng)建DataFrame時(shí)指定索引的值:
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
使用嵌套字典也可以創(chuàng)建DataFrame,此時(shí)外層字典的鍵作為列,內(nèi)層鍵則作為索引:
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的行索引,列索引以及數(shù)據(jù)值,數(shù)據(jù)值返回的是一個(gè)二維的ndarray
frame2.values
frame2.values[0,1]
1.2讀取文件
讀取文件生成DataFrame最常用的是read_csv,read_table方法。該方法中幾個(gè)重要的參數(shù)如下所示:
其他創(chuàng)建DataFrame的方式有很多,比如我們可以通過讀取mysql或者mongoDB來生成,也可以讀取json文件等等,這里就不再介紹。
2.DataFrame軸的概念
在DataFrame的處理中經(jīng)常會(huì)遇到軸的概念,這里先給大家一個(gè)直觀的印象,我們所說的axis=0即表示沿著每一列或行標(biāo)簽\索引值向下執(zhí)行方法,axis=1即表示沿著每一行或者列標(biāo)簽?zāi)O驁?zhí)行對應(yīng)的方法。
3.DataFrame一些性質(zhì)
3.1索引、切片
我們可以根據(jù)列名來選取一列,返回一個(gè)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
索引時(shí),如果要是用標(biāo)簽,最好使用loc方法,如果使用下標(biāo),最好使用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
3.2修改數(shù)據(jù)
可以使用一個(gè)標(biāo)量修改DataFrame中的某一列,此時(shí)這個(gè)標(biāo)量會(huì)廣播到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
也可以使用一個(gè)列表來修改,不過要保證列表的長度與DataFrame長度相同:
frame2.debt = np.arange(5)
可以使用一個(gè)Series,此時(shí)會(huì)根據(jù)索引進(jìn)行精確匹配:
val = pd.Series([-1.2,-1.5,-1.7],index=['two','four','five'])
frame2['debt'] = val
3.3算數(shù)運(yùn)算
DataFrame在進(jìn)行算術(shù)運(yùn)算時(shí)會(huì)進(jìn)行補(bǔ)齊,在不重疊的部分補(bǔ)足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
3.4函數(shù)應(yīng)用和映射
numpy的元素級(jí)數(shù)組方法,也可以用于操作Pandas對象:
frame = pd.DataFrame(np.random.randn(3,3),columns=list('bcd'),index=['Ohio','Texas','Colorado'])
np.abs(frame)
另一個(gè)常見的操作是,將函數(shù)應(yīng)用到由各列或行所形成的一維數(shù)組上。DataFrame的apply方法即可實(shí)現(xiàn)此功能。
f = lambda x:x.max() - x.min()
frame.apply(f)
3.5排序和排名
對于DataFrame,sort_index可以根據(jù)任意軸的索引進(jìn)行排序,并指定升序降序
frame = pd.DataFrame(np.arange(8).reshape((2,4)),index=['three','one'],columns=['d','a','b','c'])
frame.sort_index()
DataFrame也可以按照值進(jìn)行排序:
#按照任意一列或多列進(jìn)行排序
frame.sort_values(by=['a','b'])
3.6匯總和計(jì)算描述統(tǒng)計(jì)
DataFrame中的實(shí)現(xiàn)了sum、mean、max等方法,我們可以指定進(jìn)行匯總統(tǒng)計(jì)的軸,同時(shí),也可以使用describe函數(shù)查看基本所有的統(tǒng)計(jì)項(xiàng):
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會(huì)被自動(dòng)排除,可以使用skipna選項(xiàng)來禁用該功能
df.mean(axis=1,skipna=False)
#輸出
a NaN
b 1.300
c NaN
d -0.275
dtype: float64
#idxmax返回間接統(tǒng)計(jì),是達(dá)到最大值的索引
df.idxmax()
#輸出
one b
two d
dtype: object
#describe返回的是DataFrame的匯總統(tǒng)計(jì)
#非數(shù)值型的與數(shù)值型的統(tǒng)計(jì)返回結(jié)果不同
df.describe()
DataFrame也實(shí)現(xiàn)了corr和cov方法來計(jì)算一個(gè)DataFrame的相關(guān)系數(shù)矩陣和協(xié)方差矩陣,同時(shí)DataFrame也可以與Series求解相關(guān)系數(shù)。
frame1 = pd.DataFrame(np.random.randn(3,3),index=list('abc'),columns=list('abc'))
frame1.corr
frame1.cov()
#corrwith用于計(jì)算每一列與Series的相關(guān)系數(shù)
frame1.corrwith(frame1['a'])
3.7處理缺失數(shù)據(jù)
Pandas中缺失值相關(guān)的方法主要有以下三個(gè):
- isnull方法用于判斷數(shù)據(jù)是否為空數(shù)據(jù);
- fillna方法用于填補(bǔ)缺失數(shù)據(jù);
- dropna方法用于舍棄缺失數(shù)據(jù)。
上面兩個(gè)方法返回一個(gè)新的Series或者DataFrame,對原數(shù)據(jù)沒有影響,如果想在原數(shù)據(jù)上進(jìn)行直接修改,使用inplace參數(shù):
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方法如果發(fā)現(xiàn)缺失值,就會(huì)進(jìn)行整行刪除,不過可以指定刪除的方式,how=all,是當(dāng)整行全是na的時(shí)候才進(jìn)行刪除,同時(shí)還可以指定刪除的軸。
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填充缺失值可以統(tǒng)一填充,也可以按列填充,或者指定一種填充方式:
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
Dataframe中的Series是什么?
1、series與array類型的不同之處為series有索引,而另一個(gè)沒有;series中的數(shù)據(jù)必須是一維的,而array類型不一定
2、可以把series看成一個(gè)定長的有序字典,可以通過shape,index,values等得到series的屬性
其他文件的操作 文件復(fù)制操作
import shutil
shutil.copyfile(dir1,dir2)
如果路徑不存在創(chuàng)建路徑
if not os.path.exists(datapath):
os.mkdir(datapath)
查看當(dāng)前目錄下內(nèi)容
import os
all_files = os.listdir(os.getcwd())
print(all_files)
filenames = os.listdir(os.curdir) #獲取當(dāng)前目錄中的內(nèi)容
print(filenames)
總結(jié)
原文鏈接:https://blog.csdn.net/weixin_45928096/article/details/124034946
相關(guān)推薦
- 2022-03-09 軟件構(gòu)建工具makefile基礎(chǔ)講解_C 語言
- 2022-05-17 ribbon和nacos獲取服務(wù)列表不一致問題
- 2022-08-03 在C++中把字符串轉(zhuǎn)換為整數(shù)的兩種簡單方法_C 語言
- 2022-03-19 基于React?Hooks的小型狀態(tài)管理詳解_React
- 2022-08-02 深入了解Golang的map增量擴(kuò)容_Golang
- 2022-07-06 關(guān)于Pandas?count()與values_count()的用法及區(qū)別_python
- 2022-07-09 C語言堆與二叉樹的順序結(jié)構(gòu)與實(shí)現(xiàn)_C 語言
- 2022-07-09 利用Python上傳日志并監(jiān)控告警的方法詳解_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支