有一个ssqdatav2
数据,要找到其中的深圳,并且替换成圳。
因为收集到的数据出现了错误,本来只有省份简写的地方却出现了深圳。
如何找到DF中包含深圳的数据?
cond=ssqdatav2['first'].str.contains('深圳') ssqdatav2.loc[cond]
此时就找到first当中包含深圳的数据。
1、在first当中找到汉字
# 为分解firstprize定义函数 def fpp(x): if len(x)<=2: # 判断是否只有汉字,还是也有数字 return "待定" # 没有汉字的用待定表示 else: # 使用正则表达式获取中文 pattern="[\u4e00-\u9fa5]" # 汉字专用字符ASCII区间 pat=re.compile(pattern) return ','.join(pat.findall(x)) # 使用逗号作为每个省份的分隔符 #使用fp() ssqdatav2['fpprovince']=ssqdatav2['first'].apply(lambda x:fpp(x)) ssqdatav2.head()
将每个省份单独形成1列:
fpnames=['p01','p02','p03','p04','p05'] ssqdatav3[fpnames]=ssqdatav3['fpprovince'].str.split(',',expand=True) ssqdatav3
去除掉None值,是None的地方变成空值:
# 逐个分割 ssqdatav3['p001']=ssqdatav3['fpprovince'].apply(lambda x:x if x.count(',')==0 else x.split(',')[0]) ssqdatav3['p002']=ssqdatav3['fpprovince'].apply(lambda x:x.split(',')[1] if x.count(',')>=1 else '') ssqdatav3['p003']=ssqdatav3['fpprovince'].apply(lambda x:x.split(',')[2] if x.count(',')>=2 else '') ssqdatav3['p004']=ssqdatav3['fpprovince'].apply(lambda x:x.split(',')[3] if x.count(',')>=3 else '') ssqdatav3['p005']=ssqdatav3['fpprovince'].apply(lambda x:x.split(',')[4] if x.count(',')>=4 else '') ssqdatav3.to_excel('ssqdatav3p05.xlsx',index=False) ssqdatav3.head()
# 让双色球的期号ID成为订单号,7个号码都有对应的订单号,即每个期号都有7个订单号且分成不同的行 import numpy as np ssqdatav3['province2']=ssqdatav3['fpprovince'].apply(lambda x:x.split(',')) ssqdatav3 province2=ssqdatav3['province2'].to_list() province2 rs=[len(r) for r in province2] rs a=np.repeat(ssqdatav3['id'],rs) a ssqdataprov=pd.DataFrame(np.column_stack((a,np.concatenate(province2))),columns=['ID','PROVINCE']) # ssqdataprov=ssqdataprov[(ssqdataprov['PROVINCE']!='深')] # 等价 # ssqdataprov=ssqdataprov[~(ssqdataprov['PROVINCE']=='深')] # 等价 ssqdataprov=ssqdataprov[~(ssqdataprov['PROVINCE'].str.contains('深'))] ssqdataprov
按照每个字段来划分,并且删去含有深的字段,这样就只保留圳字了