Hi I'm still learning pandas and numpy in python
I learn from e-learning that you could combine 2 series with append but when I tried it It give me error
students_classes = pd.Series({'Alice': 'Physics',
'Jack': 'Chemistry',
'Molly': 'English',
'Sam': 'History'})
students_classes
kelly_classes = pd.Series(['Philosophy', 'Arts', 'Math'], index=['Kelly', 'Kelly', 'Kelly'])
kelly_classes
all_students_classes = students_classes.append(kelly_classes)
all_students_classes
and It give me error like this
AttributeError Traceback (most recent call last)
Cell In\[35\], line 3
1 # Finally, we can append all of the data in this new Series to the first using the .append()
2 # function.
\----\> 3 all_students_classes.str = students_classes.append(kelly_classes)
5 # This creates a series which has our original people in it as well as all of Kelly's courses
6 all_students_classes
File \~\\AppData\\Local\\Packages\\PythonSoftwareFoundation.Python.3.10_qbz5n2kfra8p0\\LocalCache\\local-packages\\Python310\\site-packages\\pandas\\core\\generic.py:5989, in NDFrame.__getattr__(self, name)
5982 if (
5983 name not in self.\_internal_names_set
5984 and name not in self.\_metadata
5985 and name not in self.\_accessors
5986 and self.\_info_axis.\_can_hold_identifiers_and_holds_name(name)
5987 ):
5988 return self\[name\]
\-\> 5989 return object.__getattribute__(self, name)
AttributeError: 'Series' object has no attribute 'append'
In relatively recent pandas version, 1.5.2, append
works, but gives a warning.
In pd 2.0, append
has been removed
https://pandas.pydata.org/docs/dev/whatsnew/v2.0.0.html#deprecations
In [14]: students_classes = pd.Series({'Alice': 'Physics',
...: 'Jack': 'Chemistry',
...: 'Molly': 'English',
...: 'Sam': 'History'})
...: kelly_classes = pd.Series(['Philosophy', 'Arts', 'Math'], index=['Kelly', 'Kelly', 'Kelly'])
In [15]: students_classes.append(kelly_classes)
C:\Users\paul\AppData\Local\Temp\ipykernel_6072\990183765.py:1: FutureWarning: The series.append method is deprecated and will be removed from pandas in a future version. Use pandas.concat instead.
students_classes.append(kelly_classes)
Out[15]:
Alice Physics
Jack Chemistry
Molly English
Sam History
Kelly Philosophy
Kelly Arts
Kelly Math
dtype: object
Under the covers, append
method uses _append
, which works without raising the warning:
In [16]: students_classes._append(kelly_classes)
Out[16]:
Alice Physics
Jack Chemistry
Molly English
Sam History
Kelly Philosophy
Kelly Arts
Kelly Math
dtype: object
And using the recommended concat
:
In [18]: pd.concat([students_classes,kelly_classes])
Out[18]:
Alice Physics
Jack Chemistry
Molly English
Sam History
Kelly Philosophy
Kelly Arts
Kelly Math
dtype: object
Python lists
have an efficient append
method. numpy
has a np.append
function which is a poorly named cover for calling np.concatenate
, and is often misused (it shouldn't be used iteratively). pandas
may be trying to avoid similar problems by getting rid of the append
method. With pd.concat
you can join many Series (or frames) at once, and aren't (as) tempted to use it in a loop.
Looking up the code for _append
(which is still in 2.0), I see it ends up using pd.concat
. So there's no value in using this 'work-around'. Use concat
as recommended.