Панды создают столбцы и обновляют значения в приложении - PullRequest
0 голосов
/ 18 ноября 2018

Я пытаюсь создать новые столбцы на основе столбца с диктовками (в виде строк).В качестве примера столбцы содержат {'human_number': 100} и следующий {'robot_number': 3221}

Теперь я хочу пройтись по каждой строке, создать столбец на основе ключей и заполнитьэто значение в соответствующий столбец.например: если строка имеет {'human_number': 100} в столбце type_info, она должна иметь столбец с именем human_number с номером 100 внутри и ничего не указывать в robot_number.

def number_assign(row):
try:
    temp = next(iter(ast.literal_eval(row["type_info"])))
    row[temp] = next(iter(ast.literal_eval(row["type_info"]).values()))
except:
    pass

Который я затем вызываюс df_test.apply (number_assign, axis = 1)

x = pd.DataFrame({'x': ["{'robot_number':1234}", "{'human_number':33}", '', "{'animal_number':223}"], 'y': [3, 4, 5,11]})

Должно стать примерно так:

x = pd.DataFrame({'x': ["{'robot_number':1234}", "{'human_number':33}", '', "{'animal_number':223}"], 'y': [3, 4, 5,11], 'robot_number': [1234,'','',''], 'human_number' :['',33,'',''], 'animal_number':['','','',223] })

1 Ответ

0 голосов
/ 18 ноября 2018

Подача списка словарей в pd.DataFrame

Конструктор pd.DataFrame универсален и эффективен.Вы можете напрямую передать список словарей:

from ast import literal_eval

df = pd.DataFrame({'A': ["{'human_number':100}", "{'robot_number': 3221}"]})

df = pd.DataFrame(list(map(literal_eval, df['A'])))

print(df)

   human_number  robot_number
0         100.0           NaN
1           NaN        3221.0

Решение будет работать для произвольных ключей / значений в каждом строковом словаре.Если у вас есть пустые строки, вы можете использовать понимание списка с троичным оператором:

df = pd.DataFrame({'A': ["{'human_number':100}", "{'robot_number': 3221}", ""]})

df = pd.DataFrame([literal_eval(x) if x and (x == x) else {} for x in df['A']])

print(df)

   human_number  robot_number
0         100.0           NaN
1           NaN        3221.0
2           NaN           NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...