Для формата dict
следующим образом:
data = {'log_id': 8972641530831729293, 'words_result_num': 20, 'words_result': [{'words': '05B01企商联登记注册代理事务所(通合伙)'}, {'words': 'Unit-D 608华夏启商(企业管理有限公司)'}, {'words': '中睿智诚商业管理有限公司'}, {'words': '17/F(1706)美泰德商务咨询有限公司'}, {'words': 'A2006~A2007新曙光会计服务有限公司'}, {'words': '2906-10建筑与室内设计师网'}, {'words': '中建瑞达'}]}
Я хочу извлечь цифры, буквы или знаки препинания с левой стороны строк из words
как столбцы office_name
, а остальные как столбец company_name
.
В общем, я могу получить то, что хочу, но когда у words
нет чисел, букв или знаков препинания, после разделения и извлечения эти строки будут пропущены и станут NaN
с.
df = DataFrame(data)
cols_to_drop = ['log_id', 'words_result_num']
df = df[df.columns.drop(cols_to_drop)]
df['words_result'] = df['words_result'].astype(str)
df['words_result'] = df['words_result'].map(lambda x: x.lstrip("{").rstrip("}"))
df['company_info'] = df['words_result'].str.split(': ').str[1]
df['company_info'] = df['company_info'].map(lambda x: x.lstrip("' ").rstrip("'"))
pat = r'([\x00-\x7F]+)([\u4e00-\u9fff]+.*$)'
#pat = r'(^(\d+))(\s+([^\u4e00-\u9fff]+).*$)'
df[['office_name','company_name']] = df.pop('company_info').str.extract(pat)
del df['words_result']
print(df)
Выход:
office_name company_name
0 05B01 企商联登记注册代理事务所(通合伙)
1 Unit-D 608 华夏启商(企业管理有限公司)
2 NaN NaN
3 17/F(1706) 美泰德商务咨询有限公司
4 A2006~A2007 新曙光会计服务有限公司
5 2906-10 建筑与室内设计师网
6 NaN NaN
Как я могу получить следующий ожидаемый результат? Большое спасибо за вашу помощь.
office_name company_name
0 05B01 企商联登记注册代理事务所(通合伙)
1 Unit-D 608 华夏启商(企业管理有限公司)
2 NaN 中睿智诚商业管理有限公司
3 17/F(1706) 美泰德商务咨询有限公司
4 A2006~A2007 新曙光会计服务有限公司
5 2906-10 建筑与室内设计师网
6 NaN 中建瑞达