@@ -753,28 +753,51 @@ on an entire ``DataFrame`` or ``Series``, row- or column-wise, or elementwise.
753
753
Tablewise function application
754
754
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
755
755
756
- ``DataFrames `` and ``Series `` can of course just be passed into functions.
756
+ ``DataFrames `` and ``Series `` can be passed into functions.
757
757
However, if the function needs to be called in a chain, consider using the :meth: `~DataFrame.pipe ` method.
758
- Compare the following
759
758
760
- .. code-block :: python
759
+ First some setup:
760
+
761
+ .. ipython :: python
761
762
762
- # f, g, and h are functions taking and returning ``DataFrames``
763
- >> > f(g(h(df), arg1 = 1 ), arg2 = 2 , arg3 = 3 )
763
+ def extract_city_name (df ):
764
+ """
765
+ Chicago, IL -> Chicago for city_name column
766
+ """
767
+ df[' city_name' ] = df[' city_and_code' ].str.split(" ," ).str.get(0 )
768
+ return df
764
769
765
- with the equivalent
770
+ def add_country_name (df , country_name = None ):
771
+ """
772
+ Chicago -> Chicago-US for city_name column
773
+ """
774
+ col = ' city_name'
775
+ df[' city_and_country' ] = df[col] + country_name
776
+ return df
766
777
767
- .. code-block :: python
778
+ df_p = pd.DataFrame({' city_and_code' : [' Chicago, IL' ]})
779
+
780
+
781
+ ``extract_city_name `` and ``add_country_name `` are functions taking and returning ``DataFrames ``.
782
+
783
+ Now compare the following:
784
+
785
+ .. ipython :: python
786
+
787
+ add_country_name(extract_city_name(df_p), country_name = ' US' )
788
+
789
+ Is equivalent to:
790
+
791
+ .. ipython :: python
768
792
769
- >> > (df.pipe(h)
770
- ... .pipe(g, arg1 = 1 )
771
- ... .pipe(f, arg2 = 2 , arg3 = 3 ))
793
+ (df_p.pipe(extract_city_name)
794
+ .pipe(add_country_name, country_name = " US" ))
772
795
773
796
Pandas encourages the second style, which is known as method chaining.
774
797
``pipe `` makes it easy to use your own or another library's functions
775
798
in method chains, alongside pandas' methods.
776
799
777
- In the example above, the functions ``f ``, `` g ``, and ``h `` each expected the ``DataFrame `` as the first positional argument.
800
+ In the example above, the functions ``extract_city_name `` and ``add_country_name `` each expected a ``DataFrame `` as the first positional argument.
778
801
What if the function you wish to apply takes its data as, say, the second argument?
779
802
In this case, provide ``pipe `` with a tuple of ``(callable, data_keyword) ``.
780
803
``.pipe `` will route the ``DataFrame `` to the argument specified in the tuple.
0 commit comments