总结了获得原始数据后,用Python进行数据预处理的一般操作。 之后根据总结不断更新。
目录一、数据波动二、数据转换三、数据清洗一、异常值二、重复值三、缺失值四、数据获取五、数据耦合一、1.join、索引连接基于数据帧的列二、2.merge、column连接
查看行列:data.shape
查看数据详细信息:data.info () ),可以检查是否有缺失值
http://www.Sina.com/data.describe (),可以查看异常数据
3358www.Sina.com/data.head(10 )、data.tail (10 ) )。
33558 www.Sina.com/data.columns.to list (
查看数值型数据详细信息:data.index
获取前/后10行数据:data.dtypes
查看列标签:data.ndim
查看行索引:data.values以二维ndarray形式返回数据帧中的数据
33558 www.Sina.com/seaborn.box plot (data [列名] ) ) ) )。
33558 www.Sina.com/seaborn.dist plot (data [列名].dropna ) )
二.数据转换器http://www.Sina.com/data.set _ index (日期,inplaec=True ),并将“日期”列设置为新索引
3358 www.Sina.com/data.reindex (columns=new _ columns _ list ) ) ) ) ) ) ) ) ) ) )。
3358 www.Sina.com/PD.to _ datetime (data )“日期”)、pd.read_csv(‘)“通过”、parse_date=[‘日期’] )
查看数据类型:
data[‘月’]=data [‘日期’].dt.month,
data[‘日’]=data [‘日期’].dt.day,
data[‘年’]=data [‘日期’].dt.year,
data[‘季度’]=data [‘日期’].dt.to _ period [‘q’],
data[‘星期几’]=data [‘日期’].dt.weekday _ name,
data[‘星期几-数字’]=data [‘日期’].dt.weekday
查看数据维度:data[‘温差类型’]=[‘大温差’if value=10 else‘‘正常’for value in data [‘‘温差’] ]
三.数据清洗1 .异常值查看除index外的值:
1、查看数据分布,其中线路图异常值为上下限为Q3 1.5IQR和Q1-1.5IQR,其中Q1、Q 2、Q3为数据的1、2、3分位数,IQR=Q3-Q1
2、3原理检查异常值: mean,std=data[列名].mean (,data[列名].std )、lower、upper=mean - 3 * std、mean 3 * std。 大于上限和小于下限的都被视为异常值
查看数据分布(箱线图):
1 .删除
2 .视为缺失值
3 .对数转换:右倾数据不适用于左倾数据
如果数据有正负,可以转换为:
NP.sign(x ) NP.log (NP.ABS ) x )1) )。
4 .使用阈值:使用3的值作为阈值时
5 .采用分箱法离散化处理,应用于楼梯影响,如年龄段影响y,连续年龄无影响
2 .重复值http://www.Sina.com/data.duplicated.su (
33558 www.Sina.com/data [ data.duplicated (keep=false ) ]
3358 www.Sina.com/data.drop _ duplicates (in place=true ) )。
3 .缺失值查看数据分布(直方图):data.isnull )判断缺失值; data.isnull.sum ()计算缺失值的个数
3358 www.Sina.com/data.drop na (axis=0,h
ow=) #必须指定删除方向;how:’any’只要有空值就删掉,’all’全为空值时删掉;fillna填充缺失值
字典填充:data.fillna({‘分数’:0,’姓名’:洁净的书包’’},inplace=True)
method填充:data[‘姓名’].fillna(method=’ffill’,axis=),ffill使用前一个填充,bfill使用后一个填充,axis默认为0
replace填充: data[‘列名’].replace(0,df[‘列名’].mean(),inplace=True)用均值填充 四、数据获取
获取一列: data[‘列名’],data.loc[:,’列名’]返回Series
获取多列: data[含列名的列表],返回DataFrame
获取一行: 必须使用切片,data[[0:1],],用df[0]会报错
获取多行: data[1:5],data.loc[[行],[列]]
获取多行中的某几列: data[1:5][[‘name’,‘age’]]
通过标签索引: data.loc[行,列]
通过位置获取: data.iloc
条件选取数据:
data.loc[data[‘温度’]>30]
data.loc[(data[‘最高温度’]>30) & (data[‘最低温度’]<20)]
获取索引为‘2019/9’的记录:
result = [i.startswith(‘2019/9’) for i in index_list]
data.loc[result,:]
df1.join(df2,how=) #how=‘left’(默认),‘right’,‘inner’,‘inner’
列里面一旦重名,会报错,需要这样操作
df1.join(df2,how=’’,lsuffix=’_1’,rsuffix’_r’)
pd.merge(df1,df2,how=’’) #how=‘left’,‘right’,‘inner’,‘inner’
pd.merge(df1,df2,how=’’,on=‘列名’) #on指定列连接,(如果是多列,用列表[])默认方式是inner
pd.concat([df1,df2],asix=) #axis=0(默认),按列拼接;axis=1,按行拼接,ignore_index=False,沿用原来的索引
六、其他操作 1.数据分组聚合 data.groupby(by=‘列名’).mean()
聚合函数:将一组数据进行计算返回一个值agg()是进行聚合操作
data.groupby(by=‘月份’)[‘最高温度’].max()
agg_dict={‘最高温度’:[‘max’,‘mean’],‘最低温度’:‘min’}
data.groupby(by=‘月份’).agg(agg_dict)
def top(month):
return month.sort_values(by=‘最高温度’)[-2:]
df.groupby(by=‘月份’,sort = False).apply(top)
[i**2 for i in index_list if I >2] #for后面只能写if判断,不能写else
[True表达式 if i.startswith(‘2019’) else False表达式 for i in index_list] # for前面可以写if…else