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