欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python讀取和保存為excel、csv、txt文件及對DataFrame文件的基本操作指南

 更新時間:2022年08月15日 15:06:01   作者:偶爾躺平的咸魚  
最近在做一個項目,必須把結(jié)果保存到excel文件中,下面這篇文章主要給大家介紹了關(guān)于python讀取和保存為excel、csv、txt文件及對DataFrame文件的基本操作指南的相關(guān)資料,文中通過實例代碼介紹的非常詳細,需要的朋友可以參考下

一、對excel文件的處理

1.讀取excel文件并將其內(nèi)容轉(zhuǎn)化DataFrame和矩陣形式

①將excel轉(zhuǎn)化為dataframe格式

data_file = 'Pre_results.xlsx' # Excel文件存儲位置
D = pd.read_excel('Pre_results.xlsx')
print(D)

②將excel轉(zhuǎn)化為矩陣格式

首先要說明的一點是,同一個矩陣中所有元素必須是同一類型

例如,生成矩陣時,我們可以為矩陣指定類型dtype=str、int、float等。

# 生成一個2×2的類型為str的矩陣
import numpy as np
datamatrix = np.zeros((2, 2),dtype = str)
print(datamatrix)

可見,在這個矩陣中的元素都是str類型。

代碼實戰(zhàn):

首先看一下我們要處理的excel文件的內(nèi)容。

下面直接上代碼。

import numpy as np
import xlrd
def import_excel_matrix(path):
    table = xlrd.open_workbook(path).sheets()[0] # 獲取第一個sheet表
    row = table.nrows # 行數(shù)
    #print(row)
    col = table.ncols # 列數(shù)
    datamatrix = np.zeros((row, col),dtype = float) # 生成一個nrows行*ncols列的初始矩陣,在excel中,類型必須相同,否則需要自己指定dtype來強制轉(zhuǎn)換。
    for i in range(col): # 對列進行遍歷 向矩陣中放入數(shù)據(jù)
        #print(table.col_values(i)) #是矩陣
        cols = np.matrix(table.col_values(i)) # 把list轉(zhuǎn)換為矩陣進行矩陣操作
        #print(cols)
        #cols = float(cols)
        datamatrix[:, i] = cols # 按列把數(shù)據(jù)存進矩陣中
    return datamatrix
data_file = 'to_matrix.xlsx' # Excel文件存儲位置
data_matrix = import_excel_matrix(data_file)
print(data_matrix)

運行結(jié)果:

2.將數(shù)據(jù)寫入xlsx文件

# 1.導入openpyxl模塊
import openpyxl
# 2.調(diào)用Workbook()方法
wb = openpyxl.Workbook()
# 3. 新建一個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 = "時間"
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=(('學號','姓名','年齡','性別','成績'), 
('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ù)進行處理的缺點

只能一行一行的讀出和寫入,且矩陣形式只可以存放相同類型的數(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)缺點

①CSV是純文本文件,excel不是純文本,excel包含很多格式信息在里面。

②CSV文件的體積會更小,創(chuàng)建分發(fā)讀取更加方便,適合存放結(jié)構(gòu)化信息,比如記錄的導出,流量統(tǒng)計等等。

③CSV文件在windows平臺默認的打開方式是excel,但是它的本質(zhì)是一個文本文件。

④csv文件只有一個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)自動創(chuàng)建
#w只能寫入操作 r只能讀取 a向文件追加;w+可讀可寫 r+可讀可寫 a+可讀可追加;wb+寫入進制數(shù)據(jù)
#w模式打開文件,如果文件中有數(shù)據(jù),再次寫入內(nèi)容,會把原來的覆蓋掉
f.write('hello world! = %.3f' % data) #write寫入
f.writelines(['hello!\n']) #writelines 將列表中的字符串寫入文件 但不會換行 參數(shù)必須是一個只存放字符串的列表
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)用其值時用)它可以看作是由Series組成的字典,不過這些Series公用一個索引。

③DataFrame的創(chuàng)建有多種方式,可以根據(jù)dict進行創(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時指定索引的值:

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,此時外層字典的鍵作為列,內(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ù)值返回的是一個二維的ndarray

frame2.values
frame2.values[0,1]

1.2讀取文件

讀取文件生成DataFrame最常用的是read_csv,read_table方法。該方法中幾個重要的參數(shù)如下所示:

其他創(chuàng)建DataFrame的方式有很多,比如我們可以通過讀取mysql或者mongoDB來生成,也可以讀取json文件等等,這里就不再介紹。

2.DataFrame軸的概念

在DataFrame的處理中經(jīng)常會遇到軸的概念,這里先給大家一個直觀的印象,我們所說的axis=0即表示沿著每一列或行標簽\索引值向下執(zhí)行方法,axis=1即表示沿著每一行或者列標簽?zāi)O驁?zhí)行對應(yīng)的方法。

3.DataFrame一些性質(zhì)

3.1索引、切片

我們可以根據(jù)列名來選取一列,返回一個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

3.2修改數(shù)據(jù)

可以使用一個標量修改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,此時會根據(jù)索引進行精確匹配:

val = pd.Series([-1.2,-1.5,-1.7],index=['two','four','five'])
frame2['debt'] = val

3.3算數(shù)運算

DataFrame在進行算術(shù)運算時會進行補齊,在不重疊的部分補足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的元素級數(shù)組方法,也可以用于操作Pandas對象:

frame = pd.DataFrame(np.random.randn(3,3),columns=list('bcd'),index=['Ohio','Texas','Colorado'])
np.abs(frame)

另一個常見的操作是,將函數(shù)應(yīng)用到由各列或行所形成的一維數(shù)組上。DataFrame的apply方法即可實現(xiàn)此功能。

f = lambda x:x.max() - x.min()
frame.apply(f)

3.5排序和排名

對于DataFrame,sort_index可以根據(jù)任意軸的索引進行排序,并指定升序降序

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'])

3.6匯總和計算描述統(tǒng)計

DataFrame中的實現(xiàn)了sum、mean、max等方法,我們可以指定進行匯總統(tǒng)計的軸,同時,也可以使用describe函數(shù)查看基本所有的統(tǒ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會被自動排除,可以使用skipna選項來禁用該功能
df.mean(axis=1,skipna=False)
#輸出
a      NaN
b    1.300
c      NaN
d   -0.275
dtype: float64
#idxmax返回間接統(tǒng)計,是達到最大值的索引

df.idxmax()
#輸出
one    b
two    d
dtype: object

#describe返回的是DataFrame的匯總統(tǒng)計
#非數(shù)值型的與數(shù)值型的統(tǒng)計返回結(jié)果不同
df.describe()

DataFrame也實現(xiàn)了corr和cov方法來計算一個DataFrame的相關(guān)系數(shù)矩陣和協(xié)方差矩陣,同時DataFrame也可以與Series求解相關(guān)系數(shù)。

frame1 = pd.DataFrame(np.random.randn(3,3),index=list('abc'),columns=list('abc'))
frame1.corr
frame1.cov()
#corrwith用于計算每一列與Series的相關(guān)系數(shù)
frame1.corrwith(frame1['a'])

3.7處理缺失數(shù)據(jù)

Pandas中缺失值相關(guān)的方法主要有以下三個:

  • isnull方法用于判斷數(shù)據(jù)是否為空數(shù)據(jù);
  • fillna方法用于填補缺失數(shù)據(jù);
  • dropna方法用于舍棄缺失數(shù)據(jù)。

上面兩個方法返回一個新的Series或者DataFrame,對原數(shù)據(jù)沒有影響,如果想在原數(shù)據(jù)上進行直接修改,使用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)缺失值,就會進行整行刪除,不過可以指定刪除的方式,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填充缺失值可以統(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有索引,而另一個沒有;series中的數(shù)據(jù)必須是一維的,而array類型不一定

2、可以把series看成一個定長的有序字典,可以通過shape,index,values等得到series的屬性

其他文件的操作 文件復(fù)制操作

import shutil
shutil.copyfile(dir1,dir2)

如果路徑不存在創(chuàng)建路徑

if not os.path.exists(datapath): 
	os.mkdir(datapath)

查看當前目錄下內(nèi)容

import os
all_files = os.listdir(os.getcwd())
print(all_files)
filenames = os.listdir(os.curdir)  #獲取當前目錄中的內(nèi)容
print(filenames)

總結(jié)

到此這篇關(guān)于python讀取和保存為excel、csv、txt文件及對DataFrame文件的基本操作指南的文章就介紹到這了,更多相關(guān)python讀取保存為excel、csv、txt文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python?Flask中Cookie和Session區(qū)別詳解

    Python?Flask中Cookie和Session區(qū)別詳解

    Flask是一個使用?Python?編寫的輕量級?Web?應(yīng)用框架。其?WSGI?工具箱采用?Werkzeug?,模板引擎則使用?Jinja2?。Flask使用?BSD?授權(quán)。Flask也被稱為?“microframework”?,因為它使用簡單的核心,用?extension?增加其他功能,F(xiàn)lask中Cookie和Session有什么區(qū)別呢
    2022-07-07
  • Django模板變量如何傳遞給外部js調(diào)用的方法小結(jié)

    Django模板變量如何傳遞給外部js調(diào)用的方法小結(jié)

    這篇文章主要給大家介紹了關(guān)于Django模板變量如何傳遞給外部js調(diào)用的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家具有一定的參考學習價值,需要的朋友們下面跟著小編一起來學習學習吧。
    2017-07-07
  • 淺談Python淺拷貝、深拷貝及引用機制

    淺談Python淺拷貝、深拷貝及引用機制

    本篇文章主要介紹了Python淺拷貝、深拷貝及引用機制,詳細的介紹了淺拷貝、深拷貝的介紹和區(qū)別,有興趣的可以了解一下。
    2016-12-12
  • python3 拼接字符串的7種方法

    python3 拼接字符串的7種方法

    本文給大家羅列了python3拼接字符串的七種方法,非常不錯,具有一定的參考借鑒價值,需要的朋友參考下吧
    2018-09-09
  • python 生成圖形驗證碼的方法示例

    python 生成圖形驗證碼的方法示例

    日常在網(wǎng)站使用過程中經(jīng)常遇到圖形驗證,這篇文章主要介紹了python 生成圖形驗證碼的方法示例,非常具有實用價值,需要的朋友可以參考下
    2018-11-11
  • Python自然語言處理庫之NLTK庫初級教程

    Python自然語言處理庫之NLTK庫初級教程

    NLTK(Natural Language Toolkit)是一個Python庫,用于實現(xiàn)自然語言處理(NLP)的許多任務(wù),NLTK包括一些有用的工具和資源,如文本語料庫、詞性標注器、語法分析器等,在這篇初級教程中,我們將了解NLTK的基礎(chǔ)功能,需要的朋友可以參考下
    2023-08-08
  • python建立web服務(wù)的實例方法

    python建立web服務(wù)的實例方法

    在本篇文章里小編給大家整理的是一篇關(guān)于python如何建立web服務(wù)的相關(guān)知識點內(nèi)容,有需要的朋友們可以參考下。
    2021-04-04
  • python Tcp協(xié)議發(fā)送和接收信息的例子

    python Tcp協(xié)議發(fā)送和接收信息的例子

    今天小編就為大家分享一篇python Tcp協(xié)議發(fā)送和接收信息的例子,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • windows下python使用ffmpeg實現(xiàn)rtsp推流

    windows下python使用ffmpeg實現(xiàn)rtsp推流

    這篇文章主要為大家詳細介紹了在windows環(huán)境下python如何使用ffmpeg實現(xiàn)rtsp推流,文中的示例代碼講解詳細,有需要的小伙伴可以了解一下
    2023-09-09
  • python?selenium模擬點擊問題解決方案

    python?selenium模擬點擊問題解決方案

    這篇文章主要介紹了python?selenium模擬點擊問題,涉及到安裝谷歌瀏覽器和瀏覽器驅(qū)動的相關(guān)知識介紹,本文結(jié)合實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-05-05

最新評論