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

1 数据处理思路
一、数据的读取与写入
(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()

看完记得一键三连哟~
