Решение
df = pd.DataFrame({'Col1': ['ABS', 'CDC', 'POP'],
'Col2': [45, 23, 15],
})
keys = aa.keys()
df.Col1 = [''.join([aa.get(e) if (e in keys) else e for e in list(ee)]) for ee in df.Col1.tolist()]
df
Вывод :
![enter image description here](https://i.stack.imgur.com/jm8aZ.png)
Распаковка сжатого списка Понимание
Давайте запишем понимание списка в более удобочитаемой форме. Мы создаем функцию do_something
, чтобы понять, что происходит в первой части списка-понимания. Вторая часть (for ee in df.Col1.tolist()
) по существу перебирает каждую строку в столбце 'Col1'
кадра данных df
.
def do_something(x):
# here x is like 'ABS'
xx = '.join([aa.get(e) if (e in keys) else e for e in list(x)])
return xx
df.Col1 = [do_something(ee) for ee in df.Col1.tolist()]
Распаковка do_something(x)
Функция do_something(x)
выполняет следующие действия. Будет проще, если вы попробуете это с x = 'ABS'
. ''.join(some_list)
in do_something
присоединяется к созданному списку. Следующий блок кода иллюстрирует это.
x = 'ABS'
print(do_something(x))
[aa.get(e) if (e in keys) else e for e in list(x)]
Вывод :
ADBS
['AD', 'B', 'S']
Так в чем логика ядра?
Следующий кодовый блок показывает вам шагшаг за шагом, как работает логика. Очевидно, что list comprehension
, введенный в начале решения, сжимает nested for loops
в одну строку и, следовательно, должно быть предпочтительным по сравнению со следующим.
keys = aa.keys()
packlist = list()
for ee in df.Col1.tolist():
# Here we iterate over each element of
# the dataframe's column (df.Col1)
# make a temporary list
templist = list()
for e in list(ee):
# here e is a single character of the string ee
# example: list('ABS') = ['A', 'B', 'S']
if e in keys:
# if e is one of the keys in the dict aa
# append the corresponding value to templist
templist.append(aa.get(e))
else:
# if e is not a key in the dict aa
# append e itself to templist
templist.append(e)
# append a copy of templist to packlist
packlist.append(templist.copy())
# Finally assign the list: packlist to df.Col1
# to update the column values
df.Col1 = packlist
Ссылки
Понимание списков и диктов - это очень мощные инструменты, которые любой программист на python сочтет удобными и изящными при кодировании. У них есть возможность аккуратно сжать сложный кодовый блок в одну или две строки. Я бы посоветовал вам взглянуть на следующее.
- Понимание списка:
python.org
- Понимание Dict:
python.org
- Понимание спискав Python:
medium.com