Reputation: 159
I have the following code.
s2 = pd.Series([100,"PYTHON","Soochow","Qiwsir"],
index=["mark","title","university","name"])
s2.mark = "102"
s2.price = "100"
When I print s2
, I can see the value of mark was changed and there is no price; but I can get result by printing s2.price
. Why is the price
not printed?
Upvotes: 10
Views: 461
Reputation: 164623
You are confusing attributes with series indices.
The syntax s2.xyz = 100
first looks for xyz
in the series index and overwrites it if it exists.
If it does not exist, it adds a new attribute to the series.
How to add an attribute
if 'price' not in s2:
s2.price = 100
You should not add attributes which conflict with indices; this is asking for trouble given the similar syntax permitted for access.
How to add an element to series
In order to add an element to the series with an index, use pd.Series.loc
:
s2.loc['price'] = 100
How to tell the difference
Run s2.__dict__
. You will find:
{'_data': SingleBlockManager
Items: Index(['mark', 'title', 'university', 'name'], dtype='object')
ObjectBlock: 4 dtype: object,
'_index': Index(['mark', 'title', 'university', 'name'], dtype='object'),
'_item_cache': {},
'_name': None,
'_subtyp': 'series',
'is_copy': None,
'price': '100'}
It is clear that price
has been added as an attribute, not as an index.
Upvotes: 10