• 使用pandas将表格中的数据进行处理


    任务描述:当前有一份excel表格数据,里面存在缺失值,需要对缺失的数据到es数据库中进行查找并对其进行把缺失的数据进行补全。excel表格数据如下所示:

    一、构建es库中的数据

    1.1 创建索引:

    1. # 创建physical_examination索引
    2. PUT /physical_examination
    3. {
    4. "settings": {
    5. "index": {
    6. "number_of_shards": "1",
    7. "number_of_replicas": "1"
    8. }
    9. },
    10. "mappings": {
    11. "properties": {
    12. "nums": {
    13. "type": "integer"
    14. },
    15. "name": {
    16. "type": "text"
    17. },
    18. "sex": {
    19. "type": "text"
    20. },
    21. "phone": {
    22. "type": "integer"
    23. },
    24. "result": {
    25. "type": "text"
    26. }
    27. }
    28. }
    29. }

    1.2 插入数据:   

    注意:json数据不能格式化换行,否则报错】

    1. # 向physical_examination索引中添加数据
    2. POST physical_examination/_bulk
    3. {"index":{"_id":"1"}}
    4. {"nums":1,"name":"刘一","sex":"男","phone":1234567891,"result":"优秀"}
    5. {"index":{"_id":"2"}}
    6. {"nums":2,"name":"陈二","sex":"男","phone":1234567892,"result":"优秀"}
    7. {"index":{"_id":"3"}}
    8. {"nums":3,"name":"张三","sex":"男","phone":1234567893,"result":"优秀"}
    9. {"index":{"_id":"4"}}
    10. {"nums":4,"name":"李四","sex":"男","phone":1234567894,"result":"优秀"}
    11. {"index":{"_id":"5"}}
    12. {"nums":5,"name":"王五","sex":"男","phone":1234567895,"result":"优秀"}

    1.3 查询数据:

    注意:默认查询索引下的所有数据】

    1. # 查询索引中的所有数据
    2. GET physical_examination/_search
    3. {
    4. "query": {
    5. "match_all": {}
    6. }
    7. }

    二、对excel表格中的数据处理操作

    2.1 导出es查询的数据

    方法一:直接在kibana或postman查询的结果中进行复制粘贴到一个文档。

    方法二:使用kibana导出数据。

    方法三:使用postman导出数据保存到本地。

    使用python处理数据,获取需要的数据。

    示例代码:

    1. # 读取json中体检信息
    2. with open('./data/physical_examination.json', 'r', encoding='utf-8') as f:
    3. data_json = f.read()
    4. print(data_json)
    5. # 处理json数据中的异常数据
    6. if 'false' in data_json:
    7. data_json = data_json.replace('false', "False")
    8. data_json = eval(data_json)
    9. print(data_json)
    10. print(data_json['hits']['hits'])
    11. print('*' * 100)
    12. valid_data = data_json['hits']['hits']
    13. need_data = []
    14. for data in valid_data:
    15. print(data['_source'])
    16. need_data.append(data['_source'])
    17. print(need_data)

    读取缺失数据的excel表格,把缺失的数据填补进去。

    1. # 读取需要填补数据的表格
    2. data_xlsx = pd.read_excel('./data/体检表.xlsx', sheet_name='Sheet1')
    3. # print(data_xlsx)
    4. # 获取excel表格的行列
    5. row, col = data_xlsx.shape
    6. print(row, col)
    7. # 修改表格中的数据
    8. for i in range(row):
    9. bb = data_xlsx.iloc[i]
    10. print(bb['姓名'], bb['手机号'])
    11. if pd.isnull(bb['手机号']):
    12. bb['手机号'] = '666'
    13. for cc in need_data:
    14. if cc['name'] == bb['姓名']:
    15. bb['手机号'] = cc['phone']
    16. data_xlsx.iloc[i, 3] = bb['手机号']
    17. print(bb['姓名'], bb['手机号'])
    18. print("-" * 100)
    19. print(data_xlsx)

    将最终处理好的数据保存在新建的文件中。

    1. # 保存数据到新文件中
    2. data_xlsx.to_excel('./data/new_data.xlsx', sheet_name='Sheet1', index=False, header=True)

    完整代码如下:

    1. import pandas as pd
    2. # 读取json中体检信息
    3. with open('./data/physical_examination.json', 'r', encoding='utf-8') as f:
    4. data_json = f.read()
    5. print(data_json)
    6. # 处理json数据中的异常数据
    7. if 'false' in data_json:
    8. data_json = data_json.replace('false', "False")
    9. data_json = eval(data_json)
    10. print(data_json)
    11. print(data_json['hits']['hits'])
    12. print('*' * 100)
    13. valid_data = data_json['hits']['hits']
    14. need_data = []
    15. for data in valid_data:
    16. print(data['_source'])
    17. need_data.append(data['_source'])
    18. print(need_data)
    19. # 读取需要填补数据的表格
    20. data_xlsx = pd.read_excel('./data/体检表.xlsx', sheet_name='Sheet1')
    21. # print(data_xlsx)
    22. # 获取excel表格的行列
    23. row, col = data_xlsx.shape
    24. print(row, col)
    25. # 修改表格中的数据
    26. for i in range(row):
    27. bb = data_xlsx.iloc[i]
    28. print(bb['姓名'], bb['手机号'])
    29. if pd.isnull(bb['手机号']):
    30. bb['手机号'] = '666'
    31. for cc in need_data:
    32. if cc['name'] == bb['姓名']:
    33. bb['手机号'] = cc['phone']
    34. data_xlsx.iloc[i, 3] = bb['手机号']
    35. print(bb['姓名'], bb['手机号'])
    36. print("-" * 100)
    37. print(data_xlsx)
    38. # 保存数据到新文件中
    39. data_xlsx.to_excel('./data/new_data.xlsx', sheet_name='Sheet1', index=False, header=True)

    运行效果,最终处理好的数据如下所示:

  • 相关阅读:
    剑指offer 44. 从1到n整数中1出现的次数
    MR混合现实情景实训教学
    Web:体验原生的组件化开发
    Docker最新超详细教程——Docker创建运行MySQL并挂载
    【湍流】基于matlab kolmogorov结合次谐波补偿大气湍流相位屏【含Matlab源码 2178期】
    代码随想录刷题 Day14
    2023年A-Level(IAL)考试安排
    2022年0630-Com.Java.Basis第一课《Java的入门程序》
    gpt批量原创文章生成器,不限制内容的生成器
    laravel引入element-ui后,blade模板中使用elementui时,事件未生效问题(下载element-ui到本地直接引入项目)
  • 原文地址:https://blog.csdn.net/weixin_44799217/article/details/126559956