日报11 | 数据预处理

1、报错:utf-8不可以xx,编码错误

增加encoding='gbk'

2、info()

采用info()函数打印DataFrame的完整摘要,并排除null-counts

3、数据清洗

#删除重复数据

data.drop_duplocates(keep='first',inplace=True)

keep='first'保留第一行的数据

#删除缺失值

data.dropna(axis=0,how='any',inplace=True)

inplace=,True是不创建新的对象,直接原地修改,False是创建新的对象

axis=,0删除行,1删除列

how='',all整条记录是na才能删除,any是有一个na就删除掉

#删除列

data.drop(columns=[''],inplace=True,axis=1);

重新运行会报错,需要重新运行源文件

#更新索引

data=data.reset_index(drop=True,inplace=True)

drop=True:把原来的索引index列删除,重置index

#异常值处理

data.describe()总结数据集分布的集中趋势,分散和形状,不包括NaN值

三种:左偏,对称,右偏

4、一个数据清洗的应用学习

销售金额带有元和万元,并且是以“,”表示“."

思路:取出销售金额列,对每一个数据进行清洗

编写自定义过滤函数:删除逗号,转成float,如果是万元则*10000,否则,删除元

def data_deal(number):

    if number.find('万元')!=-1:

        number_new=float(number[:number.find('万元')].replace( ',' , '' ))*10000

        pass

    else:

        number_new=float(number.replace('元','' ).replace(',' , ''))

        pass

        return number_new

data['销售金额'].map(data_deal)

tips:pass是个占位语句,不做任何事情(没想好函数放什么,可以放pass占位)

5、时间处理

data['时间']=pd.to_datetime(data['有时间列的名']) #将格式转化为datetime

data['月份']=data['有时间列的名'].apply(lambda x:x.month) #取出月份

19990203

df[]=pd.to_datetime(df[' '],format='%Y%m%d')

#format参数:按照指定的格式去匹配要转换的数据列

#%Y:四位的年份1999,%m:两位月份02,%d:两位月份31,%y:两位年份99,%h:两位小时09,%M:两位分钟15,%s:两位秒

6、一些杂七杂八

分组:data.groupby(['xxx','xxxx']).size().unstack()

unstack()可以形成一个清晰的列表

降序排序:data.sort_values(by='',ascending=False)

取出数据:data['']=data[''].str.strip() #取出首位空格

字符串数量统计:value_counts

自己加列头:df=pd.read_table('xxx.txt',names=columns,sep='\s+')

#sep='\s+':匹配任意个空格

tips:如果出现报错key:xxx,代表没有xxx

你可能感兴趣的:(日报,python)