数据清洗工作小结

  • Post author:
  • Post category:其他

今天帮课题组的老师处理了一部分数据,由于长时间不做数据清洗的工作,本栗子进行了长达2个小时的百度。这篇文档主要是针对该清洗工作的小结。

  1. 从xlsx文件中读取指定的几列数据,为数据框格式
xls=pd.ExcelFile('ABC.xlsx')
#选取连续的6列BG、BH、BI、BJ、BK、BL列
#sheet的名字为Data
df=pd.read_excel(xls, 'Data',usecols="BG:BL")
#选取不连续的列
df_year_CUX=pd.read_excel(xls, 'Data',usecols="B,CU,CX,BG:BL")

获取数据框的所有列名

columns_list=df.columns.tolist()#返回列表
  1. 查看每列数据的空值情况
df.isna().sum()

数据框中的NAN被空字符代替’’

for column_name in columns_list[1:]:
    df[column_name].fillna('', inplace=True)
  1. 对于某列数据(列名gname),挑选出满足以下条件的记录。
    数据为unknown,以AB, BC, KK这三个单词结尾
gname = df['gname'].copy()
gname.head(15)
gname_splitted = list(gname.str.split(' ').values)#split() 通过空格' '对字符串进行切片

enumerate() 函数用于将一个可遍历的数据对象(如列表、元组或字符串)组合为一个索引序列。同时列出数据和数据下标,一般用在 for 循环当中

for gname_ind, gname in enumerate(gname_splitted):#loc_ind:索引,loc:数据值
    #print(gname)
    if gname[0]=='Unknown' or gname[0]=='unknown':
        gname_index_list.append(gname_ind)
    if gname[-1]=='AB':
        gname_index_list.append(gname_ind)
    elif gname[-1]=='BC':
        gname_index_list.append(gname_ind)
    elif gname[-1]=='KK':
        gname_index_list.append(gname_ind)
print('被删除的记录的序列号:', gname_index_list)
print('根据第一个标准,删除了%d条记录', len(gname_index_list))
df_v1=df.drop(gname_index_list)
  1. 对于每行数据来说,这6列里面仅有两列有值(不为空)
    df.index可以得到数据框的行索引名
for ix in list(df_v1.index):
    row_list=list(df_v1.loc[ix].values)
    NA_counter=row_list.count('')#之前把NAN都替换为了''
    if NA_counter==4:
        v2_index_list.append(ix)
        
print('满足条件的记录的序列号:', v2_index_list)            

版权声明:本文为Isabella_leeo原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。