Equivalent of Paste R to Python

后端 未结 8 700
忘掉有多难
忘掉有多难 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.

    0 讨论(0)
  • 2021-02-01 15:29

    This is simple example how to achive that (If I'am not worng what do you want to do):

    import numpy as np
    import pandas as pd
    
    dates = pd.date_range('20130101',periods=6)
    df = pd.DataFrame(np.random.randn(6,4),index=dates,columns=list('ABCD'))
    for row in df.itertuples():
        index, A, B, C, D = row
        print '%s Evenement permanent  --> %s , next data %s' % (index, A, B)
    

    Output:

    >>>df
                       A         B         C         D
    2013-01-01 -0.400550 -0.204032 -0.954237  0.019025
    2013-01-02  0.509040 -0.611699  1.065862  0.034486
    2013-01-03  0.366230  0.805068 -0.144129 -0.912942
    2013-01-04  1.381278 -1.783794  0.835435 -0.140371
    2013-01-05  1.140866  2.755003 -0.940519 -2.425671
    2013-01-06 -0.610569 -0.282952  0.111293 -0.108521
    

    This what loop for print: 2013-01-01 00:00:00 Evenement permanent --> -0.400550121168 , next data -0.204032344442

    2013-01-02 00:00:00 Evenement permanent  --> 0.509040318928 , next data -0.611698560541
    
    2013-01-03 00:00:00 Evenement permanent  --> 0.366230438863 , next data 0.805067758304
    
    2013-01-04 00:00:00 Evenement permanent  --> 1.38127775713 , next data -1.78379439485
    
    2013-01-05 00:00:00 Evenement permanent  --> 1.14086631509 , next data 2.75500268167
    
    2013-01-06 00:00:00 Evenement permanent  --> -0.610568516983 , next data -0.282952162792
    
    0 讨论(0)
提交回复
热议问题