Применение функции к строкам кадра данных в Python - PullRequest
0 голосов
/ 30 апреля 2020

У меня есть датафрейм и в пределах 1 столбца находится вложенный словарь. Я хочу создать функцию, в которой вы передаете каждую строку и имя столбца, а функция json_normalizes столбца в кадре данных. Тем не менее, я продолжаю получать и ошибка »функция принимает 2 позиционных аргумента, 6 были даны« Есть более 6 столбцов в кадре данных и более 6 столбцов в строке [col] (см. Ниже), поэтому я запутался, как 6 аргументов предоставляются

import pandas as pd
from pandas.io.json import json_normalize
def fix_row_(row, col):
    if type(row[col]) == list:
        df = json_normalize(row[col])
        df['id'] = row['id']
    else:
        df = pd.DataFrame()
    return df

new_df = data.apply(lambda x: fix_po_(x, 'Items'), axis=1)

Таким образом, new_df будет фреймом данных. В приведенном ниже примере это будет просто кадр данных с A, B, C в качестве столбцов и 1,2,3 в качестве значений.

Квази-воспроизводимый пример:

my_dict = {'A': 1, 'B': 2, 'C': 3}
ids = pd.Series(['id1','id2','id3'],name='ids')
data= pd.DataFrame(ids)
data['my_column']=''
m = data['ids'].eq('id1')
data.loc[m, 'my_column'] = [my_dict] * m.sum()

1 Ответ

1 голос
/ 30 апреля 2020

Просто передайте ваш столбец, используя axis = 1

df.apply(lambda x: fix_row_(x['my_column']), axis=1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...