python数据清洗
第二part
- Q1 str分割
昨天发现merge无法匹配,找到原因发现id是不对应的
df1的id是四位数;df2的id是六位数 后两位是区号
tem["city"]=tem["city"].astype(str)
tem["city"]=tem["市代码"].str[0:4]
这样就解决了id_code 不匹配的问题
- Q2 无法修改为datetime格式
原因:原始数据date 超过pd.timestamp.max,eg 3099-12-1
df0.loc[df0['data'] > f'{pd.Timestamp.max:%Y%M%d}', 'data']
= pd.np.nan
df0["data"]=pd.to_datetime(df0["data"])
- Q3 特征变量的类别过多,如果一些类别数量过少,可以删掉 or脏的数据也del
a=df0["var"].value_counts()
m=df0["var"].isin(a.index[a<number])
df0.loc[m,"土地用途"]=np.nan # 替换为空缺值
时间数据加减 df[]=(df[]-df[]).dt.days
删除price中为空缺值的数据
df1.dropna(subset=["price"],inplace=True)
- Q4 数据存在inf 无穷大 or 无穷小 因为a/b b存在0 或 空缺
df2["price"].replace([np.inf, -np.inf], np.nan)
导出到dta =.= 文件太大了 导出不出来df.to_stata("name.dta)
ps: price里面有负数 进行筛选
df2=df1[df1["avgprice"]>0]