日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

数据分析:数据处理篇1

發布時間:2024/3/13 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 数据分析:数据处理篇1 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

數據的寫入與讀取

  • 數據的寫入
    • .csv文件寫入
    • .xlsx文件寫入
  • 數據的讀取
    • .csv文件讀取
    • .xlsx文件讀取
  • 數據的使用
    • 隨機獲取信息
    • 數據去重

在做數據分析的時候,Excel表格是一個常用的工具,但是當數據文件數據量比較大時,Excel光是打開文件就需要花費很長的時間。此時,利用pandas就會變得非常高效。因此,本文將討論利用pandas讀取以及寫入Excel。

數據的寫入

之前的課程中,我們了解了pycharm可以將數據寫入Excel和csv。其實,支持寫入的文件格式還有HTML、JSON。
csv是最為常見的以純文本文件存儲數據文件的格式,它的優點是通用性很強,不受操作系統以及具體的軟件的限制;Excel是一種非常常見的數據表格,因此本文也要介紹。

.csv文件寫入

DataFrame格式的內容想要寫入csv文件非常容易,只需要一個to_csv方法即可,而這個方法又是DataFrame自帶的,不需要單獨引用。下面給大家舉例。

import pandas as pd dic = {'ID':[1001,1002,1003,1001,1004,1005,1006,1004,1007,1008],'name':['張三','李四','王五','張三','趙六','孫七','周八','趙六','吳九','鄭十'],'age':['18','19','30','18','20','22','25','20','21','16'],'high':['150.00','167.00','180.00','150.00','160.00','165.00','168.00','160.00','172.00','178.00'],'sex':['男','女','男','男','女','男','男','女','女','男']} df=pd.DataFrame(data = dic,index = ['a','b','c','d','e','f','g','h','i','j']) # 以下內容為寫入csv文件 df.to_csv(path_or_buf='./People_Information.csv', encoding='utf_8_sig') print('end')

其中,’./People_Information.csv’意思為新建名稱為People_Information,保存路徑為當前目錄。如果我們想要保存到其他路徑,可以在此電腦中打開要保存到的文件夾,復制路徑,粘貼到這里的“./”前面并將’ \ ‘改為’/'即可。encoding='utf_8_sig’是規定編碼方式為UTF-8。如果不做此設置,當我們打開文件時就會看到亂碼,感興趣的小伙伴可以自行嘗試。
看看運行結果:

我們在當前目錄文件下找到了csv文件,并且內容和輸出結果一樣。如果不希望在生成的csv文件中存儲index中的索引信息,可以將其設置為false:

df.to_csv('./People_Information.csv',index=False,encoding='utf_8_sig')

這個方法中還有很多默認參數,需要實現不同功能是可以查看不同參數。注意要選擇DataFrame類下的to_csv方法哦!
熟悉Excel的小伙伴們應該發現了,csv相當于是閹割版的Excel了,它只有一個sheet表,并且命名就是文件名。那么我們如何把DataFrame的數據存到Excel呢?

.xlsx文件寫入

ExcelWriter是pandas下的一個方法,它可以在指定路徑下創建一個.xlsx文件,并將其命名。運行一下試試看:

import pandas as pd pd.ExcelWriter("D:./test.xlsx")

可以看到,我們已經在指定路徑創建了一個test.xlsx文件了,只是無法打開。接下來我們繼續為他填入數據,這個工作使用的方法是to_excel(excel_writer,sheet_name),需要把內容填到新建的.xlsx文件的指定工作表中,并將工作表進行命名。如果沒給sheet_name參數賦值,系統會自動賦值為Sheet1。下面我們測試一下:

from pandas import Series,DataFrame import pandas as pd dic1 = {'ID':[1001,1002,1003,1001,1004,1005,1006,1004,1007,1008],'name':['張三','李四','王五','張三','趙六','孫七','周八','趙六','吳九','鄭十'],'age':['18','19','30','18','20','22','25','20','21','16'],} dic2 = {'high':['150.00','167.00','180.00','150.00','160.00','165.00','168.00','160.00','172.00','178.00'],'sex':['男','女','男','男','女','男','男','女','女','男']} df1=pd.DataFrame(data = dic1,index = ['a','b','c','d','e','f','g','h','i','j']) df2=pd.DataFrame(data = dic2,index = ['a','b','c','d','e','f','g','h','i','j']) writer = pd.ExcelWriter("scores3.xlsx") df1.to_excel(writer, "sh1") df2.to_excel(writer) writer.save()

看看運行結果:

數據的讀取

以上我們介紹了數據存儲到.csv文件和.xlsx文件,相信大家已經學會了如何寫入數據了。下面我們就來學習如何讀取數據。

.csv文件讀取

我們以剛剛寫好的兩個文件做例子來研究如何讀取數據。首先,想要讀取.csv文件就需要使用pandas下的read_csv方法,直接上結果:

import pandas as pd df = pd.read_csv('People_Information.csv') print(df) print(df.shape) # 顯示輸出端表格行列數

看看結果:

當然,有些時候表格會出現一些我們不喜歡的問題,比如第一行本來應該是行索引,但實際是亂碼,如:

這時,如果我們還想顯示剛才的結果,就需要讓代碼從第2行開始顯示,做以下改動:

people = pd.read_csv('People1.csv',header = 1) # header是默認參數,默認值為0,表示從第0剛開始輸出

改動之后在運行程序,運行結果應該和剛才一樣,這里就不展示圖片了。
當然,如果.csv文件沒有列索引,我們可以把header設置為none,讓終端輸出標簽索引。

.xlsx文件讀取

.xlsx文件的讀取需要指定要讀取的工作表,因此其讀取的代碼寫成這樣:

from pandas import Series,DataFrame import pandas as pd df = pd.read_excel('scores3.xlsx',sheet_name='Sheet1') # df = df.loc[:, ~df.columns.str.contains('^Unnamed')] print(df)

我們先來看看結果:

結果雖然是對的,但是有一個Unnamed破壞了陣型,導致讀取的數據和實際想要的數據維度不匹配,想要刪掉它,可以把上述屏蔽掉的代碼加上。
實際上,sheet_name也是一個默認參數,如果我們不修改其值,他會自動輸出第一個工作表的內容,大家可以試試看。

數據的使用

下面我們家是一個實際的場景,來應用數據讀取。

隨機獲取信息

我們依然使用剛剛建立的Excel表格做例子。現在,我們需要在所有人中隨機抽取三個進行點名:

from pandas import DataFrame import pandas as pd import random df = pd.read_excel('scores3.xlsx',sheet_name='sh1') df = df.loc[:,'name'] index_list = df.index.tolist() # 獲取df的行索引并存儲為列表 for i in range(0,3):value = index_list[random.randint(0,len(index_list)-1)]# 從0到列表長度-1的數中抽取隨機數,如果不-1有可能會發生溢出msg = df.iloc[value]print(msg)

我暈醒了很多次,找到了一組有問題的輸出:

盡管這個表格中有重復的數據,但是周八是獨一無二的,這就是說隨機取值是有放回抽樣。如果一直運行下去,就會出現兩個張三,或者三個趙六之類的現象,下面我們講述如何避免這樣的問題。

數據去重

列表中的數據有重復是一個比較煩人的現象。但是想解決這個問題也并不麻煩,我們可以將指定列轉化為列表,然后進行列表去重:

from pandas import DataFrame import pandas as pd import random df = pd.read_excel('scores3.xlsx',sheet_name='sh1') val=df['name'].tolist() # 獲取姓名,并轉成list print(val) num = set(val) # 去重 print(num,'\n',len(num))

這樣一番操作下來,沒有重復數據的num就是一個set類型的數據了。如果需要的話可以使用list()強轉為列表:

可以看到,我們已經去掉了重復的名字。下面我們填之前的坑,讓輸出的隨機人員不重復:

from pandas import DataFrame import pandas as pd import random df = pd.read_excel('scores3.xlsx',sheet_name='sh1') val=df['name'].tolist() # 獲取姓名,并轉成list num = list(set(val)) # 去重 sel=[] while True:vallue = num[random.randint(0, len(num) - 1)]sel.append(vallue) # 將取到元素壓入列表sel=list(set(sel)) # 列表去重if len(sel)==3:break print(sel)

大家可以多試幾次,檢查一下。提示:可以加入計數器查看循環的次數。
如何去除真正重復的元素
上文我們討論的去重,是依據某一列元素是否重復的去重,但是實際上,某一列的數據不足以代表數據是否重復,比如我現在對表格做一個修改:

盡管兩個張三的名字和年齡一樣,但ID是不同的,因此我們需要去充的時候把兩個都留下來。這樣的要求set()函數就不好幫我們處理了,我們可以手動寫一段代碼來判斷重復與否:

from pandas import DataFrame import pandas as pd import random cont=[] F=1 df = pd.read_excel('scores3.xlsx',sheet_name='sh1') for i in range(len(df.index.tolist())):# 注:range函數生成的數組末位即為len(df.index.tolist())-1,因此不需要額外-1val=df.loc[i,].tolist() # 獲取姓名,并轉成listfor j in range(len(cont)):if cont[j]==val:F=0 # 標記重復breakif F==1:cont.append(val)else:F=1 print('去重后元素數量為:%d'%len(cont)) df=DataFrame(cont,columns = ['ID','name','age']) print(df)

運行測試一下:

本文給大家分享了pandas對.csv文件和.xlsx文件進行讀寫的操作,以及模擬了現實中可能會出現的一些場景,下次會繼續給大家帶來數據刪除、空值處理等內容,喜歡的小伙伴關注一下吧~

總結

以上是生活随笔為你收集整理的数据分析:数据处理篇1的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。