pythonnet模組的使用,把DataTable轉換成DataFrame

來源:互聯網
上載者:User

標籤:set   ddr   系統   需求   das   ram   enc   tab   temp   

1.模組的選擇

  python與c#互動目前有兩種方式,一種是使用ironpython模組,另一種是使用pythonnet模組。筆者推薦使用pythonnet,因為ironpython不支援c#中的一些模組,如比較有名的pandas,numpy等。

2.使用pythonnet

  使用pip下載pythonnet模組,在安裝路徑下會有clr.pyd、python.Runtime.dll 兩個檔案,pyd檔案是在python指令碼中使用,而python.Runtime則是在c#程式中所調用的動態庫。(注意:下載的pythonnet模組、c#產生的系統位元和使用的IDE位元一致,如:都是x86,或者x64)

3.代碼

   

 1 import sys 2 import os 3 sys.path.insert(0,os.path.abspath(‘./‘)) 4  5 import clr 6 clr.AddReference(‘System.Data‘) 7  8 from System import Data 9 from System.Data import DataSet10 from System.Data import DataTable11 from System.Data import DataColumn12 from System.Data import DataRow13 14 import pandas as pd15 import numpy as np 16 from pymongo import MongoClient17 import types18 import bson19 20 def TableToDataFrame(dt):21     ‘‘‘將DataTable類型轉換成DataFrame類型‘‘‘22     colTempCount = 023     dic={}24     while(colTempCount < dt.Columns.Count):25         li = []26         rowTempCount = 027         colName = dt.Columns[colTempCount].ColumnName28         while (rowTempCount < dt.Rows.Count):29             result = dt.Rows[rowTempCount][colTempCount]30             li.append(result)31             rowTempCount = rowTempCount + 132         33         colTempCount = colTempCount + 134         dic.setdefault(colName,li)35 36     df = pd.DataFrame(dic)37     return(df)38 39 def DataFrameToDic(df):40     ‘‘‘將DataFrame資料類型轉成字典類型‘‘‘41     dic = df.to_dict(‘list‘)42     return dic43 44 def CollenctionMongodb():45     dataTableList = []46     client = MongoClient(‘localhost‘,27017)47     db = client[‘資料庫名稱‘]48     c = db[‘表名稱‘]49     dataTableList.append(c)50     ds = DataSet(object)51     for dbTable in dataTableList:52         dt = DataTable(object)53         dbDR = dbTable.find_one()54         for dbTable in list(dbDR.keys()):55             dc = DataColumn(object)56             dc.ColumnName = a57             dt.Columns.Add(dc)58 59         for item in dbTable.find():60             li = []61             for b in list(item.values()):62                 if types.IntType == type(b):63                     li.append(b)64                 elif types.StringType == type(b):65                     li.append(b.encode("utf-8"))66                 elif isinstance(b,bson.object.Object):67                     pass68                 else:69                     li.append(b)70 71         dt.Rows.Add(li)72     ds.Tables.Add(dt)73     return ds 74 75 if __name__ == ‘__main__‘:76     ds.CollenctionMongodb()77     

4、對代碼的解釋

  以上是程式的主代碼,根據需求從mongodb中取出資料,並用python指令碼把資料轉換成c#裡的DataTable類型,再把C#中DataTable類型轉換成python 中的DataFrame,接下來就用python中的演算法函數來操作資料了,在這個項目中是把操作後的資料用python的字典類型回傳給c#程式。c#拿到的資料格式則是json字串,使用c#解析字串就能拿到相應的資料。

  c#使用pythonnet.runtime.dll 動態庫,具體的使用方法在 pypi 下載pythonnet模組時,查看使用文檔會用詳細的用法解釋。

5、本作者部落格寫的比較少,寫作水平有待提高。因為文筆有限沒有對以上代碼進行逐句的解釋,對c#和python有瞭解的人看會輕鬆一些,還請讀者多多包涵,希望此文檔對讀者有一點啟發作用,若以上代碼有哪裡不懂的地方可以留言。

pythonnet模組的使用,把DataTable轉換成DataFrame

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.