|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
跑得好慢呀
下面是代码:
- import pandas as pd
- import jieba
- login = pd.read_csv(r'login.csv', encoding = 'gbk')
- for i in range(login.shape[0]): #login.shape[0]
- if login.loc[i,'login_place'][0:2] == '中国':
- login.loc[i,'国家'] = '中国'
- if '黑龙江' in login.loc[i,'login_place']:
- login.loc[i,'省份'] = '黑龙江'
- if len(login.loc[i,'login_place']) > 5:
- login.loc[i,'地区'] = login.loc[i,'login_place'][5:]
- else:pass
- if '内蒙古' in login.loc[i,'login_place']:
- login.loc[i,'省份'] = '内蒙古'
- if len(login.loc[i,'login_place']) > 5:
- login.loc[i,'地区'] = login.loc[i,'login_place'][5:]
- else:pass
- if '新疆维吾尔' in login.loc[i,'login_place']:
- login.loc[i,'省份'] = '新疆维吾尔'
- if len(login.loc[i,'login_place']) > 7:
- login.loc[i,'地区'] = login.loc[i,'login_place'][7:]
- else:pass
- else:
- login.loc[i,'省份'] = login.loc[i,'login_place'][2:4]
- login.loc[i,'地区'] = login.loc[i,'login_place'][4:]
- else:
- li = [word for word in jieba.cut(login.loc[i,'login_place'])]
- if len(li) == 2:
- login.loc[i,'国家'] = li[0]
- login.loc[i,'省份'] = li[1]
- else:
- login.loc[i,'国家'] = li[0]
复制代码
不慢才怪呢!—— 逐行for遍历,还每次判断居然都login.loc[],相当于每次每行都进行"全表扫描"。 全表大概38万,你这样处理,最终至少造成 38万*38万*。。(看看你那么多个 if 和 login.loc[],都不觉得繁琐和奇怪吗)
其实,几十万行pandas完全可以处理过了,半秒钟都不用,也不用jieba来自动分词,就几种特殊情况完全可以自己手动分词。(省份要么三个字,如黑龙江,要么两个字)
解决:
- #%%
- import pandas as pd
- df = pd.read_csv('login.csv', encoding='gbk')
- display(df)
- df['country'] = df['login_place'].str[:2]
- def func_prov(row):
- return row[2:5] if '黑龙江' in row or '内蒙古' in row else row[2:4]
- def func_city(row):
- return row[5:] if '黑龙江' in row or '内蒙古' in row else row[4:]
- df['province'] = df['login_place'].apply(func_prov)
- df['city'] = df['login_place'].apply(func_city)
- df
- #%%
- # 测试
- df[df.province=='新疆']
- df[df.province=='黑龙江']
- df[df.province=='内蒙古']
- df[df.city=='乌鲁木齐']
- df[ df.city.str.contains('自治') ]
- df[ df.province.str.contains('新疆|黑龙江') ]
复制代码
|
|