欢迎光临散文网 会员登陆 & 注册

利用python清洗.log文件并保存为.csv文件

2023-03-01 13:39 作者:剪纸折笔  | 我要投稿

数据处理思路

    一、数据的读取与写入

    (1)读取.log数据

    (2)将.log数据写入.xlsx文件并保存至当前文件夹

    二、数据清洗

    (1)去除表格中多余的工作簿

    (2)去除表格中多余的数据

            去除多余的列

            去除多余的行

            去除数据中的字符“?”并将其替换成nan

            将数据为nan的用其前一个数据替换


2 数据处理步骤及代码

2.1 读取.log文件数据

读取.log文件的时,读取有用数据前36*6=216列,代码如下:

# (1)读取原始数据
raw_data = open("./data/测试.log", "r", encoding="UTF-8")
count = 0
datalist = []
for i in raw_data:
    datalist.append(tuple(i.split( )[0:218]))
raw_data.close()


2.2 将.log数据写入.xlsx文件并保存至当前文件夹

将文件写入到.xlsx文件中,创建一个空的sheet工作簿,利用for循环将代码写入到sheet工作簿,并保存当前文件下,形成规范的.xlsx数据文件,代码如下:

# (2)将原始数据写入.xlsx文件并保存至当前文件夹
data_over = openpyxl.Workbook()
sheet = data_over.create_sheet()
for i in range(0, len(datalist)):
    data = datalist[i]
    for j in range(0, 217):
        sheet.cell(row=(i+1), column=(j+1), value=data[j])
data_over.save("./raw_data.xlsx")


2.3 去除多余的工作簿

由于csv文件格式的状态下,业已包含了sheet工作簿,如果不去除该工作簿,利用pd.read_csv()就是出现DataFrame的内容为None,其代码如下:

# (3)去除表格中多余的工作簿,df为dataframe
sheet_name = "Sheet"
workbook = openpyxl.load_workbook("raw_data.xlsx")
worksheet = workbook[sheet_name]
workbook.remove(worksheet)
workbook.save("data_cleansing.xlsx")


2.4 去除表格中多余的title

数据进行预分析,发现了数据中含有多余的title对后续数据的分析将造成影响针对这种情况,一般有两种方法进行处理,一是采用drop函数,去除多余的行二是用loc函数对数据进行多次读取。前者适用于超大数据,很简便,后者常用于少量数据分析。这里采用第一种方法,代码如下:

# (4)去除表格中多余的title
df = pd.read_excel("data_cleansing.xlsx")
df.to_csv("data_cleansing.csv",encoding="UTF-8")
df = pd.read_csv("./data_cleansing.csv",index_col=0,low_memory=False,sep=",")
new_df = df.drop(index=[84, 237], inplace=False)
new_df.to_csv("data_cleansing_drop.csv")


2.5 去除数据中的字符“?”并用前一行对应的列值填充

数据预览中,发现数据中包含?字符串,利用numpy中的nan特殊字符取替换掉?,后续就可以用相关函数去替换nan经分析,数据的值与时间具有强相关,所以在此次填写nan中,采用前一行对应值经行补充,函数为:method="ffill",代码如下:

# 将含有"?"的位置替换成nan值
new_df[new_df == "?"] = np.nan
# 用前一行对应的值补填空缺值
new_df_nan = new_df.fillna(method="ffill")
new_df_nan.to_csv("data_cleansing_over.csv")

3 完整代码

import pandas as pd
import numpy as np
import openpyxl
def data_processing():

"""
    包含数据清洗(去除不需要的字段和错误数据)、数据转存至Excel、数据库等。
    一、原始数据的读取与写入
    (1)读取原始数据
    (2)将原始数据写入.xlsx文件并保存至当前文件夹
    二、原始数据清洗
    (3)去除表格中多余的工作簿
    (4)去除表格中多余的title
    """

    # (1)读取原始数据
    raw_data = open("./data/测试.log", "r", encoding="UTF-8")
    datalist = []
    for i in raw_data:
        datalist.append(tuple(i.split( )[0:218]))
    raw_data.close()


    # (2)将原始数据写入.xlsx文件并保存至当前文件夹
    data_over = openpyxl.Workbook()
    sheet = data_over.create_sheet()
    for i in range(0, len(datalist)):
        data = datalist[i]
        for j in range(0, 217):
            sheet.cell(row=(i+1), column=(j+1), value=data[j])
    data_over.save("./raw_data.xlsx")


    # (3)去除表格中多余的工作簿
    sheet_name = "Sheet"
    workbook = openpyxl.load_workbook("raw_data.xlsx")
    worksheet = workbook[sheet_name]
    workbook.remove(worksheet)
    workbook.save("data_cleansing.xlsx")


    # (4)去除表格中多余的title,df为dataframe
    df = pd.read_excel("data_cleansing.xlsx")
    df.to_csv("data_cleansing.csv",encoding="UTF-8")
    df = pd.read_csv("./data_cleansing.csv",index_col=0,low_memory=False,sep=",")
    new_df = df.drop(index=[84, 237], inplace=False)
    new_df.to_csv("data_cleansing_drop.csv")
    # 将含有"?"的位置替换成nan值
    new_df[new_df == "?"] = np.nan
    # 用前一行对应的值补填空缺值
    new_df_nan = new_df.fillna(method="ffill")
    new_df_nan.to_csv("data_cleansing_over.csv")
    return None

if __name__ == "__main__":
    # 数据处理
    data_processing()


看完记得一键三连哟~


利用python清洗.log文件并保存为.csv文件的评论 (共 条)

分享到微博请遵守国家法律