Строковые строки пропускаются после разделения и извлечения в Python - PullRequest
0 голосов
/ 13 мая 2019

Для формата 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      中建瑞达

Ответы [ 2 ]

1 голос
/ 13 мая 2019

Вы должны добавить ? для поддержки шаблона, содержащего необязательные группы.

df = pd.DataFrame(data)
df = df.apply(lambda x:x.words_result['words'],axis=1).to_frame(name='words_result')

# df = df.pop('words_result').str.extract(r'(?P<office_name>[\x00-\x7F]+)?(?P<company_name>[\u4e00-\u9fff]+.*$)')
df[['office_name','company_name']] = df.pop('words_result').str.extract(r'([\x00-\x7F]+)?([\u4e00-\u9fff]+.*$)')
print(df)

   office_name       company_name
0        05B01  企商联登记注册代理事务所(通合伙)
1   Unit-D 608     华夏启商(企业管理有限公司)
2          NaN       中睿智诚商业管理有限公司
3   17/F(1706)        美泰德商务咨询有限公司
4  A2006~A2007        新曙光会计服务有限公司
5      2906-10          建筑与室内设计师网
6          NaN               中建瑞达
1 голос
/ 13 мая 2019

Идея состоит в том, чтобы заменить отсутствующие значения исходными значениями на fillna:

cols_to_drop = ['log_id', 'words_result_num']
df = df[df.columns.drop(cols_to_drop)]

s = df.pop('words_result').apply(lambda x: x['words'])
pat = r'([\x00-\x7F]+)([\u4e00-\u9fff]+.*$)'
#pat = r'(^(\d+))(\s+([^\u4e00-\u9fff]+).*$)'
df[['office_name','company_name']] = s.str.extract(pat)

df['company_name'] = df['company_name'] .fillna(s)
print(df)
   office_name       company_name
0        05B01  企商联登记注册代理事务所(通合伙)
1   Unit-D 608     华夏启商(企业管理有限公司)
2          NaN       中睿智诚商业管理有限公司
3   17/F(1706)        美泰德商务咨询有限公司
4  A2006~A2007        新曙光会计服务有限公司
5      2906-10          建筑与室内设计师网
6          NaN               中建瑞达

Ваше решение должно быть изменено:

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("}"))
s = df['words_result'].str.split(': ').str[1]
s = s.map(lambda x: x.lstrip("' ").rstrip("'"))
#s = df['company_info']
pat = r'([\x00-\x7F]+)([\u4e00-\u9fff]+.*$)'
#pat = r'(^(\d+))(\s+([^\u4e00-\u9fff]+).*$)'
df[['office_name','company_name']] = s.str.extract(pat)
del df['words_result']

df['company_name'] = df['company_name'] .fillna(s)
print(df)
   office_name       company_name
0        05B01  企商联登记注册代理事务所(通合伙)
1   Unit-D 608     华夏启商(企业管理有限公司)
2          NaN       中睿智诚商业管理有限公司
3   17/F(1706)        美泰德商务咨询有限公司
4  A2006~A2007        新曙光会计服务有限公司
5      2906-10          建筑与室内设计师网
6          NaN               中建瑞达
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...