今天帮课题组的老师处理了一部分数据,由于长时间不做数据清洗的工作,本栗子进行了长达2个小时的百度。这篇文档主要是针对该清洗工作的小结。
- 从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()#返回列表
- 查看每列数据的空值情况
df.isna().sum()
数据框中的NAN被空字符代替’’
for column_name in columns_list[1:]:
df[column_name].fillna('', inplace=True)
- 对于某列数据(列名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)
- 对于每行数据来说,这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)