与pandas初相识

  前一阵子有个同事说,他看不懂从kibana上拉下来的日志,但是又想分析一些数据,感觉很头痛,每次都找开发给他整理一下,但是开发也很忙,要数据的频率也略高,那时候正好我跟这位需求方的项目,负责测试工作。然后,我晚上加班的时候就帮他写了一个很小的程序,帮助这位需求方同事可以随时查看数据。也不会占用任何人太多时间。

  解决思路:

  一、读取原始报表

    这里的config.ini中放的是原始报表名称 

[filenames]
file_name=XXXXXX.csv

  二、拆分数据

  三、按照既定规则计算符合flag的数据

  四、拼接数据,形成新的报表输出

  

'''
@create on : 20190311
@Update : 20190311
@description: 该模块可以直接获取最直观的报表

'''

import pandas as pd
import configparser
import os
import json


# 获取项目根目录
dirpath = os.path.dirname(os.path.realpath(__file__))

# 拼接时候注意一下,会从第一个带有斜杠的地址开始拼接
sencondpath = os.path.join(dirpath, "log_file")
config = configparser.ConfigParser()
config.read("config.ini")
filename = config.get("filenames", "file_name")

# 改config.ini中的文件名自动拼接
finalpath = os.path.join(sencondpath, filename)

# 读入的CSV数据对象
log_df = pd.read_csv(finalpath, encoding="utf-8")
print(log_df)


# 半成品矩阵
def mergedf():
    df_right = log_df['message']
    df_left = log_df['@timestamp']
    result_df = pd.concat([df_left, df_right], axis=1)
    return result_df


def oprate_df():
    # 计算有多少符合数据旗标
    flag = 0

    df_size = log_df.__len__()
    urlParams, jrtt_reports, convert_ids = [], [], []

    try:
        goal_df = mergedf()
        for line in range(df_size):
            data_row = json.loads(log_df.loc[line, 'message'])
            print(log_df.loc[line, '@timestamp'])
            if data_row["data"]["jrtt_report"] is not None and data_row["data"]["convert_id"] is not None:
                flag = flag + 1
            line = line + 1

            urlParams.append(data_row["data"]["urlparams"])
            jrtt_reports.append(data_row["data"]["jrtt_report"])
            convert_ids.append(data_row["data"]["convert_id"])
        print(flag)
    except Exception as e:
        print("日志文件解析出错" + str(e))

    try:
        goal_df.insert(0, 'uelParmas', urlParams)
        goal_df.insert(0, 'jrtt_repot', jrtt_reports)
        goal_df.insert(0, 'convert_id', convert_ids)

    except Exception as e:
        print("矩阵组合出错!"+str(e))
    #print(goal_df)
    return goal_df


if __name__ == '__main__':

    total_df = oprate_df()
    excelFile = "D:/anylysis/dataResult/workResult.xlsx"
    writer = pd.ExcelWriter(excelFile)
    total_df.to_excel(writer, 'FinalResult')
    writer.save()

  

原文地址:https://www.cnblogs.com/yuki-nana/p/10803116.html