Как заменить строку, являющуюся частью кадра данных, списком в pandas? - PullRequest
0 голосов
/ 22 апреля 2020

Я новичок в кодировании, и, поскольку это очень простой вопрос, я знаю, что там должны быть ответы. Тем не менее, я искал около получаса, набирая бесчисленное количество запросов в Google, и все пролетело у меня над головой.

Допустим, у меня есть фрейм данных со столбцами «Имя», «Хобби» и 2 человека. итак 2 ряда. В настоящее время у меня есть хобби в виде строк в виде "hobby1, hobby2". Я хотел бы изменить это на ["hobby1", "hobby2"]

hobbies_as_string = df.iloc[0, 2]
hobbies_as_list = hobbies_as_string.split(',')
df.iloc[0, -2] = hobbies_as_list

Однако это приводит к ошибке, ValueError: Должен иметь равные ключи len и значение при установке с итерацией. Я не понимаю, почему, если я получаю hobbies_as_string как копию, я могу назначить столбец хобби в виде списка без проблем. Я также могу назначить df.iloc [0, -2] в виде строки, например, «Эй», и это прекрасно работает. Я думаю, это связано с ValueError. Почему бы pandas не позволить мне назначить его в виде списка?

Большое спасибо за вашу помощь и объяснения.

Ответы [ 3 ]

0 голосов
/ 22 апреля 2020

Другой способ сделать это

df=pd.DataFrame({'hobbiesStrings':['"hobby1, hobby2"']})
df

заменить , пробел на "," и поместить hobbiesStrings значения в список

x=df.hobbiesStrings.str.replace('((?<=)(\,\s+)+)','","').values.tolist()

x

Здесь я использовать выражения регулярных выражений. В основном я заменяю comma \,, за которым следует пробел \s на ","

перезапись столбцов s с использованием df.assign

df=df.assign(hobbies_stringsnes=[x])

, соединенных вместе

 df=df.assign(hobbies_stringsnes=[df.hobbiesStrings.str.replace('((\,\s))','","').values.tolist()])
df

Выход

enter image description here

0 голосов
/ 22 апреля 2020

Используйте метод "at" для замены значения списком

import pandas as pd
# create a dataframe
df = pd.DataFrame(data={'Name': ['Stinky', 'Lou'], 
                        'Hobbies': ['Shooting Sports', 'Poker']})
# replace Lous hobby of poker with a list of degen hobbies with the at method
df.at[1, 'Hobbies'] = ['Poker', 'Ponies', 'Dice']
0 голосов
/ 22 апреля 2020

Вы ищете apply a split построчно для каждого значения в списке?

import pandas as pd
df = pd.DataFrame({'Name' : ['John', 'Kate'],
              'Hobbies' : ["Hobby1, Hobby2", "Hobby2, Hobby3"]})
df['Hobbies'] = df['Hobbies'].apply(lambda x: x.split(','))
df

ИЛИ, если вы не большой лямбда-exer, тогда вы можете сделать str.split() на весь столбец, что проще:

import pandas as pd
df = pd.DataFrame({'Name' : ['John', 'Kate'],
              'Hobbies' : ["Hobby1, Hobby2", "Hobby2, Hobby3"]})
df['Hobbies'] = df['Hobbies'].str.split(",")
df

Вывод:

    Name    Hobbies
0   John    [Hobby1, Hobby2]
1   Kate    [Hobby2, Hobby3]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...