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


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 DataSet
10 from System.Data import DataTable
11 from System.Data import DataColumn
12 from System.Data import DataRow
13 
14 import pandas as pd
15 import numpy as np 
16 from pymongo import MongoClient
17 import types
18 import bson
19 
20 def TableToDataFrame(dt):
21     '''將DataTable類型轉換成DataFrame類型'''
22     colTempCount = 0
23     dic={}
24     while(colTempCount < dt.Columns.Count):
25         li = []
26         rowTempCount = 0
27         colName = dt.Columns[colTempCount].ColumnName
28         while (rowTempCount < dt.Rows.Count):
29             result = dt.Rows[rowTempCount][colTempCount]
30             li.append(result)
31             rowTempCount = rowTempCount + 1
32         
33         colTempCount = colTempCount + 1
34         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 dic
43 
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 = a
57             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                     pass
68                 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有了解的人看會輕松一些,還請讀者多多包涵,希望此文檔對讀者有一點啟發作用,若以上代碼有哪里不懂的地方可以留言。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM