Обновление: используйте комбинацию из f-строк, словаря и списка, чтобы извлечь длину всех списков в столбце tags
, кратко:
extract_dict = [{f'count {y}':len(z) for y,z in x.items()} for x in df.tags]
# construct new df with only extracted counts
pd.DataFrame.from_records(extract_dict)
# new df with extracted counts & original data
df.assign(**pd.DataFrame.from_records(extract_dict))
# outputs:
_id tags count image \
0 43 {'tags': ['webcom', 'start', 'temp', 'webcomfo... 1.0
1 83 {'tags': ['yourself', 'start', ''], 'image': [... 1.0
2 76 {'tags': ['en', 'webcom'], 'links': ['http://w... NaN
3 77 {'tags': ['webcomznakomstvo', 'webcomzhiznx', ... 2.0
4 81 {'tags': ['webcomfotografiya'], 'users': ['mys... NaN
count links count tags count users
0 NaN 5 NaN
1 NaN 3 NaN
2 2.0 2 1.0
3 NaN 5 NaN
4 1.0 1 2.0
оригинальный ответ:
Если вы заранее знаете имена столбцов, можно использовать списки для этой задачи
extract = [(len(x.get('tags',[])), len(x.get('images',[])), len(x.get('users',[])))
for x in df.tags]
# extract outputs:
[(5, 0, 0), (3, 0, 0), (2, 0, 1), (5, 0, 0), (1, 0, 2)]
, которые затем можно использовать для создания нового кадра данных или для назначения дополнительных столбцов
# creates new df
pd.DataFrame.from_records(
extract,
columns=['count tags', 'count images', 'count users']
)
# creates new dataframe with extracted data and original df
df.assign(
**pd.DataFrame.from_records(
extract,
columns=['count tags', 'count images', 'count users'])
)
Последнее выражение выдает следующий вывод:
_id tags count tags \
0 43 {'tags': ['webcom', 'start', 'temp', 'webcomfo... 5
1 83 {'tags': ['yourself', 'start', ''], 'image': [... 3
2 76 {'tags': ['en', 'webcom'], 'links': ['http://w... 2
3 77 {'tags': ['webcomznakomstvo', 'webcomzhiznx', ... 5
4 81 {'tags': ['webcomfotografiya'], 'users': ['mys... 1
count images count users
0 0 0
1 0 0
2 0 1
3 0 0
4 0 2