Интерполяция строк Python с использованием словаря и строк

Ниже ниже, чем подходы здесь , но мы можем вычислить дополнительный столбец на основе содержимого более чем одного столбца, и для дополнительного столбца можно вычислить более двух значений.

Простой пример, используя только столбец «Установить»:

def set_color(row):
    if row["Set"] == "Z":
        return "red"
    else:
        return "green"

df = df.assign(color=df.apply(set_color, axis=1))

print(df)
  Set Type  color
0   Z    A    red
1   Z    B    red
2   X    B  green
3   Y    C  green

Пример с учетом большего количества цветов и большего количества столбцов:

def set_color(row):
    if row["Set"] == "Z":
        return "red"
    elif row["Type"] == "C":
        return "blue"
    else:
        return "green"

df = df.assign(color=df.apply(set_color, axis=1))

print(df)
  Set Type  color
0   Z    A    red
1   Z    B    red
2   X    B  green
3   Y    C   blue

20
задан Paul Floyd 6 February 2019 в 13:41
поделиться

4 ответа

Почему бы и нет:

mystr = "path: %s curr: %s prev: %s" % (mydict[path], curr, prev)

Между прочим, я изменил пару имен, которые вы использовали, чтобы попирать встроенные имена - не делайте этого, это никогда не нужно, и время от времени будет тратить много времени на отслеживание вызываемого им неправильного поведения (когда что-то использует встроенное имя, предполагая, что оно означает встроенное, но вы скрыли его с именем нашей собственной переменной).

14
ответ дан 29 November 2019 в 22:25
поделиться

И, конечно же, вы можете использовать более новый (начиная с версии 2.6) .format строковый метод:

>>> mydict = {"path": "/var/blah"}
>>> curr = "1.1"
>>> prev = "1.0"
>>>
>>> s = "path: {0} curr: {1} prev: {2}".format(mydict['path'], curr, prev)
>>> s
'path: /var/blah curr: 1.1 prev: 1.0'   

Или, если бы все элементы были в словаре, вы могли бы сделать это:

>>> mydict = {"path": "/var/blah", "curr": 1.1, "prev": 1.0}
>>> "path: {path} curr: {curr} prev: {prev}".format(**mydict)
'path: /var/blah curr: 1.1 prev: 1.0'
>>>

Из документации str.format () :

Этот метод форматирования строки новый стандарт в Python 3.0 и следует предпочесть% форматирование описано в Операции форматирования строк в новом коде.

23
ответ дан 29 November 2019 в 22:25
поделиться

Вы можете попробовать следующее:

data = {"path": "/var/blah",
        "curr": "1.1",
        "prev": "1.0"}

s = "path: %(path)s curr: %(curr)s prev: %(prev)s" % data
50
ответ дан 29 November 2019 в 22:25
поделиться

Возможно:

path = dict['path']
str = "path: %(path)s curr: %(curr)s prev: %(prev)s" % locals()

Я имею в виду, что это работает:

>>> dict = {"path": "/var/blah"}
>>> curr = "1.1"
>>> prev = "1.0"
>>> path = dict['path']
>>> str = "path: %(path)s curr: %(curr)s prev: %(prev)s" % locals()
>>> str
'path: /var/blah curr: 1.1 prev: 1.0'

Я просто не знаю, считаете ли вы это короче.

13
ответ дан 29 November 2019 в 22:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: