Reputation: 16142
I want to add an integer to my pandas.Series
Here is my code:
import pandas as pd
input = pd.Series([1,2,3,4,5])
input.append(6)
When i run this, i get the following error:
Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
f.append(6)
File "C:\Python33\lib\site-packages\pandas\core\series.py", line 2047, in append
verify_integrity=verify_integrity)
File "C:\Python33\lib\site-packages\pandas\tools\merge.py", line 878, in concat
verify_integrity=verify_integrity)
File "C:\Python33\lib\site-packages\pandas\tools\merge.py", line 954, in __init__
self.new_axes = self._get_new_axes()
File "C:\Python33\lib\site-packages\pandas\tools\merge.py", line 1146, in _get_new_axes
concat_axis = self._get_concat_axis()
File "C:\Python33\lib\site-packages\pandas\tools\merge.py", line 1163, in _get_concat_axis
indexes = [x.index for x in self.objs]
File "C:\Python33\lib\site-packages\pandas\tools\merge.py", line 1163, in <listcomp>
indexes = [x.index for x in self.objs]
AttributeError: 'int' object has no attribute 'index'
How can I fix that?
Upvotes: 26
Views: 79343
Reputation: 2582
series.append(s)
was Deprecated since version 1.4.0.
Removed since version 2.0 (2.0.0 (April 3, 2023))
Recommended approach is pd.concat()
. Read about the reasoning in GH issue #35407.
import pandas as pd
s1 = pd.Series( [1,2,3,4,5] )
s2 = pd.Series( 6 )
pd.concat([s1, s2], ignore_index=True)
>>>
0 1
1 2
2 3
3 4
4 5
5 6
dtype: int64
(However, beware of index conflicts by the default usage:).
pd.concat([s1, s2])
>>>
0 1
1 2
2 3
3 4
4 5
0 6
dtype: int64
my_column = 'a'
df = pd.DataFrame( s1, columns=[my_column] )
df
>>>
a
0 1
1 2
2 3
3 4
4 5
pd.concat([ df,
s2.to_frame().rename({0:my_column},axis=1)
],
ignore_index=True)
>>>
a
0 1
1 2
2 3
3 4
4 5
5 6
(Again, beware the default use case, causing conflicts in the index and specified column).
pd.concat( [ df, s2] )
>>>
a 0
0 1.0 NaN
1 2.0 NaN
2 3.0 NaN
3 4.0 NaN
4 5.0 NaN
0 NaN 6.0
Upvotes: 6
Reputation: 48347
Convert appended item to Series
:
>>> ds = pd.Series([1,2,3,4,5])
>>> ds.append(pd.Series([6]))
0 1
1 2
2 3
3 4
4 5
0 6
dtype: int64
or use DataFrame
:
>>> df = pd.DataFrame(ds)
>>> df.append([6], ignore_index=True)
0
0 1
1 2
2 3
3 4
4 5
5 6
and last option if your index is without gaps,
>>> ds.set_value(max(ds.index) + 1, 6)
0 1
1 2
2 3
3 4
4 5
5 6
dtype: int64
And you can use numpy as a last resort:
>>> import numpy as np
>>> pd.Series(np.concatenate((ds.values, [6])))
Update
In most recent versions, pandas.Series.append
method has been deprecated, a decision that sparked some controversy. Consequently this answer is no longer valid, as well as the question. Consider using pandas.concat as a partial substitute.
Upvotes: 37
Reputation: 71
Using set_value
generates the warning:
FutureWarning: set_value is deprecated and will be removed in a future release. Please use .at[] or .iat[] accessors instead
So you can instead use at
like this:
input.at[input.index[-1]+1]=6
Upvotes: 6
Reputation: 171
here is a one-line answer It is dependent on how the array is defined. If we use Series is a one d array. Use the array notation like x[index] = new value
example
import pandas as pd
input = pd.Series([1,2,3,4,5])
newval = 7 # say
input[len(input)] = newval
or use append if the array is being directly defined.
#if input is defined as []
input2 = [1, 2]
#input2[len(input2)] = 3 # does not work
input2.append(3) #works
input2
Upvotes: -2