Как создать новый столбец на основе другого столбца, имеющего пары имени ключа и значения ключа? ⇐ Python
Как создать новый столбец на основе другого столбца, имеющего пары имени ключа и значения ключа?
Я загрузил файл csv в DF с помощью read_csv. Полученный DF имеет следующие столбцы:
Имя, Отдел, Тип вакансии, Адрес1, Адрес2, Адрес3, Адрес4, Адрес5
Данные в столбцах адреса (Адрес1, Адрес2, Адрес3, Адрес4 и Адрес5) структурированы, как показано ниже
{'AddressItemName': 'StreetNo', 'AddressItemValue': '12345'} {'AddressItemName': 'StreetName', 'AddressItemValue': 'Бродвей'} {'AddressItemName': 'Город', 'AddressItemValue': 'Нью-Йорк'} {'AddressItemName': 'Штат', 'AddressItemValue': 'NY'} {'AddressItemName': 'Zip', 'AddressItemValue': '12345'} Части адреса не отображаются в каком-либо определенном порядке в 5 столбцах. Например, Address1 может содержать Zip в одной записи, номер улицы в другой и штат в другой. Ниже приведен пример DF:
data = [['Tom', 10, 'Бизнес-аналитик',{'AddressItemName': 'StreetNo', 'AddressItemValue': '12345'},{'AddressItemName': 'StreetName', 'AddressItemValue ': 'Бродвей'},{'AddressItemName': 'Город', 'AddressItemValue': 'Нью-Йорк'},{'AddressItemName': 'Штат', 'AddressItemValue': 'NY'},{'AddressItemName': ' Zip', 'AddressItemValue': '12345'}], ['Дэвид', 10, 'Аналитик данных',{'AddressItemName': 'Zip', 'AddressItemValue': '23456'},{'AddressItemName': 'Город ', 'AddressItemValue': 'Атланта'},{'AddressItemName': 'StreetNo', 'AddressItemValue': '11111'},{'AddressItemName': 'StreetName', 'AddressItemValue': 'Main St'},{' AddressItemName': 'Штат', 'AddressItemValue': 'GA'}], ['Ник', 10, 'Инженер данных', {'AddressItemName': 'Штат', 'AddressItemValue': 'NY'},{'AddressItemName ': 'Zip', 'AddressItemValue': '12345'},{'AddressItemName': 'StreetNo', 'AddressItemValue': '34567'},{'AddressItemName': 'StreetName', 'AddressItemValue': 'Бродвей'} ,{'AddressItemName': 'Город', 'AddressItemValue': 'Нью-Йорк'}]] df = pd.DataFrame(data, columns=['Имя', 'Отдел', 'Тип задания', 'Адрес1', 'Адрес2', 'Адрес3', 'Адрес4', 'Адрес5']) печать(df.to_string()) Имя ОтделТип работы Адрес1 Адрес2 Адрес3 Адрес4 Адрес5 0 Том 10 Бизнес-аналитик {'AddressItemName': 'StreetNo', 'AddressItemValue': '12345'} {'AddressItemName': 'StreetName', 'AddressItemValue': 'Broadway'} {'AddressItemName': 'City', 'AddressItemValue ': 'Нью-Йорк'} {'AddressItemName': 'Штат', 'AddressItemValue': 'NY'} {'AddressItemName': 'Zip', 'AddressItemValue': '12345'} 1 Дэвид 10 Аналитик данных {'AddressItemName': 'Zip', 'AddressItemValue': '23456'} {'AddressItemName': 'City', 'AddressItemValue': 'Атланта'} {'AddressItemName': 'StreetNo', 'AddressItemValue ': '11111'} {'AddressItemName': 'StreetName', 'AddressItemValue': 'Main St'} {'AddressItemName': 'State', 'AddressItemValue': 'GA'} 2 Ник 10 Инженер по обработке данных {'AddressItemName': 'State', 'AddressItemValue': 'NY'} {'AddressItemName': 'Zip', 'AddressItemValue': '12345'} {'AddressItemName': 'StreetNo', 'AddressItemValue ': '34567'} {'AddressItemName': 'StreetName', 'AddressItemValue': 'Бродвей'} {'AddressItemName': 'Город', 'AddressItemValue': 'Нью-Йорк'} Я хочу создать отдельные столбцы для Street#, StreetName, City, State и Zip с соответствующими значениями из столбцов адреса. Я хочу, чтобы приведенный выше DF был таким же, как нижний DF:
data = [['Том', 10, 'Бизнес-аналитик','12345','Бродвей','Нью-Йорк','Нью-Йорк','12345'], ['Дэвид', 10, «Аналитик данных», «11111», «Мейн-стрит», «Атланта», «Джорджия», «23456»], [»Ник», 10, «Инженер данных», «34567», «Бродвей», «Нью-Йорк» ','Нью-Йорк','12345']] df1 = pd.DataFrame(data, columns=['Имя', 'Отдел', 'Тип задания', 'Номер улицы', 'Название улицы', 'Город', 'Штат', 'Почтовый индекс']) df1 Название Отдела Тип работы Улица № Улица Город Штат Почтовый индекс 0 Том 10 Бизнес-аналитик 12345 Бродвей Нью-Йорк Нью-Йорк 12345 1 Дэвид 10 Аналитик данных 11111 Main St Atlanta GA 23456 2 Nick 10 Data Engineer 34567 Broadway New York NY 12345 Я планировал перебрать DF для каждой части адреса. Это будет 5 итераций по всему DF для 5 адресов. Мне было интересно, есть ли лучший способ сделать это.
Я загрузил файл csv в DF с помощью read_csv. Полученный DF имеет следующие столбцы:
Имя, Отдел, Тип вакансии, Адрес1, Адрес2, Адрес3, Адрес4, Адрес5
Данные в столбцах адреса (Адрес1, Адрес2, Адрес3, Адрес4 и Адрес5) структурированы, как показано ниже
{'AddressItemName': 'StreetNo', 'AddressItemValue': '12345'} {'AddressItemName': 'StreetName', 'AddressItemValue': 'Бродвей'} {'AddressItemName': 'Город', 'AddressItemValue': 'Нью-Йорк'} {'AddressItemName': 'Штат', 'AddressItemValue': 'NY'} {'AddressItemName': 'Zip', 'AddressItemValue': '12345'} Части адреса не отображаются в каком-либо определенном порядке в 5 столбцах. Например, Address1 может содержать Zip в одной записи, номер улицы в другой и штат в другой. Ниже приведен пример DF:
data = [['Tom', 10, 'Бизнес-аналитик',{'AddressItemName': 'StreetNo', 'AddressItemValue': '12345'},{'AddressItemName': 'StreetName', 'AddressItemValue ': 'Бродвей'},{'AddressItemName': 'Город', 'AddressItemValue': 'Нью-Йорк'},{'AddressItemName': 'Штат', 'AddressItemValue': 'NY'},{'AddressItemName': ' Zip', 'AddressItemValue': '12345'}], ['Дэвид', 10, 'Аналитик данных',{'AddressItemName': 'Zip', 'AddressItemValue': '23456'},{'AddressItemName': 'Город ', 'AddressItemValue': 'Атланта'},{'AddressItemName': 'StreetNo', 'AddressItemValue': '11111'},{'AddressItemName': 'StreetName', 'AddressItemValue': 'Main St'},{' AddressItemName': 'Штат', 'AddressItemValue': 'GA'}], ['Ник', 10, 'Инженер данных', {'AddressItemName': 'Штат', 'AddressItemValue': 'NY'},{'AddressItemName ': 'Zip', 'AddressItemValue': '12345'},{'AddressItemName': 'StreetNo', 'AddressItemValue': '34567'},{'AddressItemName': 'StreetName', 'AddressItemValue': 'Бродвей'} ,{'AddressItemName': 'Город', 'AddressItemValue': 'Нью-Йорк'}]] df = pd.DataFrame(data, columns=['Имя', 'Отдел', 'Тип задания', 'Адрес1', 'Адрес2', 'Адрес3', 'Адрес4', 'Адрес5']) печать(df.to_string()) Имя ОтделТип работы Адрес1 Адрес2 Адрес3 Адрес4 Адрес5 0 Том 10 Бизнес-аналитик {'AddressItemName': 'StreetNo', 'AddressItemValue': '12345'} {'AddressItemName': 'StreetName', 'AddressItemValue': 'Broadway'} {'AddressItemName': 'City', 'AddressItemValue ': 'Нью-Йорк'} {'AddressItemName': 'Штат', 'AddressItemValue': 'NY'} {'AddressItemName': 'Zip', 'AddressItemValue': '12345'} 1 Дэвид 10 Аналитик данных {'AddressItemName': 'Zip', 'AddressItemValue': '23456'} {'AddressItemName': 'City', 'AddressItemValue': 'Атланта'} {'AddressItemName': 'StreetNo', 'AddressItemValue ': '11111'} {'AddressItemName': 'StreetName', 'AddressItemValue': 'Main St'} {'AddressItemName': 'State', 'AddressItemValue': 'GA'} 2 Ник 10 Инженер по обработке данных {'AddressItemName': 'State', 'AddressItemValue': 'NY'} {'AddressItemName': 'Zip', 'AddressItemValue': '12345'} {'AddressItemName': 'StreetNo', 'AddressItemValue ': '34567'} {'AddressItemName': 'StreetName', 'AddressItemValue': 'Бродвей'} {'AddressItemName': 'Город', 'AddressItemValue': 'Нью-Йорк'} Я хочу создать отдельные столбцы для Street#, StreetName, City, State и Zip с соответствующими значениями из столбцов адреса. Я хочу, чтобы приведенный выше DF был таким же, как нижний DF:
data = [['Том', 10, 'Бизнес-аналитик','12345','Бродвей','Нью-Йорк','Нью-Йорк','12345'], ['Дэвид', 10, «Аналитик данных», «11111», «Мейн-стрит», «Атланта», «Джорджия», «23456»], [»Ник», 10, «Инженер данных», «34567», «Бродвей», «Нью-Йорк» ','Нью-Йорк','12345']] df1 = pd.DataFrame(data, columns=['Имя', 'Отдел', 'Тип задания', 'Номер улицы', 'Название улицы', 'Город', 'Штат', 'Почтовый индекс']) df1 Название Отдела Тип работы Улица № Улица Город Штат Почтовый индекс 0 Том 10 Бизнес-аналитик 12345 Бродвей Нью-Йорк Нью-Йорк 12345 1 Дэвид 10 Аналитик данных 11111 Main St Atlanta GA 23456 2 Nick 10 Data Engineer 34567 Broadway New York NY 12345 Я планировал перебрать DF для каждой части адреса. Это будет 5 итераций по всему DF для 5 адресов. Мне было интересно, есть ли лучший способ сделать это.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение