Equivalent of Paste R to Python

后端 未结 8 799
忘掉有多难
忘掉有多难 2021-02-01 14:32

I am a new python afficionado. For R users, there is one function : paste that helps to concatenate two or more variables in a dataframe. It\'s very useful. For example Suppose

8条回答
  •  误落风尘
    2021-02-01 15:23

    For this particular case, the paste operator in R is closest to Python's format which was added in Python 2.6. It's newer and somewhat more flexible than the older % operator.

    For a purely Python-ic answer without using numpy or pandas, here is one way to do it using your original data in the form of a list of lists (this could also have been done as a list of dict, but that seemed more cluttered to me).

    # -*- coding: utf-8 -*-
    names=['categorie','titre','tarifMin','lieu','long','lat','img','dateSortie']
    
    records=[[
        'zoo',   'Aquar',     0.0,'Aquar',2.385,48.89,'ilo',0],[
        'zoo',   'Aquar',     4.5,'Aquar',2.408,48.83,'ilo',0],[
        'lieu',  'Jardi',     0.0,'Jardi',2.320,48.86,'ilo',0],[
        'lieu',  'Bois',      0.0,'Bois', 2.455,48.82,'ilo',0],[
        'espac', 'Canal',     0.0,'Canal',2.366,48.87,'ilo',0],[
        'espac', 'Canal',    -1.0,'Canal',2.384,48.89,'ilo',0],[
        'parc',  'Le Ma',    20.0,'Le Ma', 2.353,48.87,'ilo',0] ]
    
    def prix(p):
        if (p != -1):
            return 'C  partir de {} €uros'.format(p)
        return 'sans prix indique'
    
    def msg(a):
        return 'Evenement permanent  --> {}, {} {}'.format(a[0],a[1],prix(a[2]))
    
    [m.append(msg(m)) for m in records]
    
    from pprint import pprint
    
    pprint(records)
    

    The result is this:

    [['zoo',
      'Aquar',
      0.0,
      'Aquar',
      2.385,
      48.89,
      'ilo',
      0,
      'Evenement permanent  --> zoo, Aquar C  partir de 0.0 \xe2\x82\xacuros'],
     ['zoo',
      'Aquar',
      4.5,
      'Aquar',
      2.408,
      48.83,
      'ilo',
      0,
      'Evenement permanent  --> zoo, Aquar C  partir de 4.5 \xe2\x82\xacuros'],
     ['lieu',
      'Jardi',
      0.0,
      'Jardi',
      2.32,
      48.86,
      'ilo',
      0,
      'Evenement permanent  --> lieu, Jardi C  partir de 0.0 \xe2\x82\xacuros'],
     ['lieu',
      'Bois',
      0.0,
      'Bois',
      2.455,
      48.82,
      'ilo',
      0,
      'Evenement permanent  --> lieu, Bois C  partir de 0.0 \xe2\x82\xacuros'],
     ['espac',
      'Canal',
      0.0,
      'Canal',
      2.366,
      48.87,
      'ilo',
      0,
      'Evenement permanent  --> espac, Canal C  partir de 0.0 \xe2\x82\xacuros'],
     ['espac',
      'Canal',
      -1.0,
      'Canal',
      2.384,
      48.89,
      'ilo',
      0,
      'Evenement permanent  --> espac, Canal sans prix indique'],
     ['parc',
      'Le Ma',
      20.0,
      'Le Ma',
      2.353,
      48.87,
      'ilo',
      0,
      'Evenement permanent  --> parc, Le Ma C  partir de 20.0 \xe2\x82\xacuros']]
    

    Note that although I've defined a list names it isn't actually used. One could define a dictionary with the names of the titles as the key and the field number (starting from 0) as the value, but I didn't bother with this to try to keep the example simple.

    The functions prix and msg are fairly simple. The only tricky portion is the list comprehension [m.append(msg(m)) for m in records] which iterates through all of the records, and modifies each to append your new field, created via a call to msg.

提交回复
热议问题