Это работает:
df['b']= df['a'].map(lambda x: max(y if(x.lower().find(y.lower())> -1) else '' for y, z in od.items()))
import serial
ser = serial.Serial(0) # open first serial port
print ser.portstr # check which port was really used
ser.write("hello") # write a string
ser.close() # close port
используйте https://pythonhosted.org/pyserial/для большего количества примеров
Я не использовал pyserial, но на основе документации API в https://pyserial.readthedocs.io/en/latest/shortintro.html он походит на очень хороший интерфейс. Могло бы стоить перепроверить спецификацию для ПРИ командах device/radio/whatever, с которым Вы имеете дело.
А именно, некоторые требуют, чтобы некоторый период тишины прежде и/или после команды AT для него ввел в командный режим. Я встретился с некоторыми, которым не нравятся чтения ответа без некоторой задержки сначала.