Redis(四) Pandas中DataFrame操作


  在機器學習領域,由於Python中包含較多的機器學習資源,難免會涉及到不同語言之間的交互【Java調用python】。從而會涉及到非python基礎數據類型的傳輸,如pandas中的DataFrame進行數據的傳輸

  可以通過pandas中的

1 # 1. msgpack
2 to_msgpack()   # set
3 read_msgpack()    # get
4 # 2. json
5 to_json()   # set
6 read_json()   # get

兩種方式將數據序列化成redis中 set和get可操作的類型

操作步驟

  1. 數據准備;
  2. redis准備;
  3. 使用DataFrame中的.to_msgpack()方法或者.to_json方法將數據類型為DataFrame的數據進行序列化;
  4.  為序列化后的變量set到redis中;
  5. 通過給序列化后的變量的名字(字符串)get redis中的內容;
  6. 使用.read_msgpack()方法或者.read_json()方法將序列化的內容進行反序列化。

  下述代碼中按照上述步驟,使用msgpack 和 json 依次將DataFrame放入redis中,再從redis中取出。並比較了二者的時間消耗。【msgpack在處理DataFrame的時間更快

 1 import redis
 2 import json
 3 import pandas as pd
 4 import time
 5 # json 的序列化和反序列化可以能夠使redis中的set 和 get 實現字典和列表上傳和下載   使用起來更加輕便
 6 # 而用使用hash操作來針對字典類型, lpush類型來針對list類型
 7 data_frame_info = pd.read_csv('data.csv')
 8 r = redis.StrictRedis(host='localhost', port=6379, password=123456)
 9 msgpack_time = time.time()
10 df_bytes = data_frame_info.to_msgpack()  # 序列化
11 r.set("data_fram_info", df_bytes)  # 存入redis
12 res_dataframe = r.get("data_fram_info")  # 從redis中獲取
13 res_data_frame = pd.read_msgpack(res_dataframe)   # 反序列化為DataFrame
14 
15 pd.set_option('display.max_columns', 1000000)   # 可以在大數據量下,沒有省略號
16 pd.set_option('display.max_rows', 1000000)
17 pd.set_option('display.max_colwidth', 1000000)
18 pd.set_option('display.width', 1000000)
19 
20 # print(res_data_frame)
21 print("\033[42;1m%s\033[0m" %("msgpack_time:"), time.time()-msgpack_time)
22 
23 json_time = time.time()
24 df_bytes1 = data_frame_info.to_json()
25 r.set("data_fram_info1", df_bytes1)
26 res_dataframe1 = r.get("data_fram_info1")
27 res_data_frame1 = pd.read_json(res_dataframe1)
28 
29 pd.set_option('display.max_columns', 1000000)
30 pd.set_option('display.max_rows', 1000000)
31 pd.set_option('display.max_colwidth', 1000000)
32 pd.set_option('display.width', 1000000)
33 # print(res_data_frame1)
34 print("\033[42;1m%s\033[0m" %("json_time:"), time.time()-json_time)  

  如果同時需要從redis中獲取多個DataFrame,可以使用map迭代調用rs.get()方法pd.read_msgpack()方法,並將獲取到的內容依次進行賦值。如下述代碼所示:

1 rs_list = list(map(rs.get, [x_train, y_train, x_test, y_test, y_test_id]))
2 rs_context = list(map(pd.read_msgpack, rs_list))
3 x_train, y_train, x_test, y_test, y_test_id = [i for i in rs_context]

 


免責聲明!

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



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