[PROPOSAL] Make Series.update() accept a dictionary · Issue #33215 · pandas-dev/pandas (original) (raw)
Code Sample, a copy-pastable example if possible
I propose to re-write the Series.update()
method to accept a dictionary object. This would be useful for example when you are iterating over a DataFrame using DataFrame.iterrows()
, and you want to update the row
object returned by iterrows()
in order to build another DataFrame starting from the DataFrame you are iterating over
Here is an example that doesn't work:
import pandas as pd s = pd.Series({'city':'Rome'}) s.update({'country':'Italy'})
Problem description
Traceback (most recent call last):
File "", line 1, in
File "C:\InstalledPrograms\Anaconda3\lib\site-packages\pandas\core\series.py", line 2807, in update
other = other.reindex_like(self)
AttributeError: 'dict' object has no attribute 'reindex_like'
Simple use case
In this use case, an explicit conversion to dict() is needed
import random
import pandas as pd
def very_long_dictionary():
d = dict()
for c in range(2,10):
d[c] = random.randint(1,101)
return d
df = pd.DataFrame([[1,2],[3,4],[5,6]])
print(df)
outdl = list()
for index,row in df.iterrows():
#Explicit conversion to dict is needed
row = dict(row)
row.update(very_long_dictionary())
outdl.append(row)
newdf = pd.DataFrame(outdl)
print(newdf)
Expected Output
The series would update to the new value
Output of pd.show_versions()
pd.show_versions()
INSTALLED VERSIONS
commit : None
python : 3.7.7.final.0
python-bits : 64
OS : Windows
OS-release : 10
machine : AMD64
processor : Intel64 Family 6 Model 158 Stepping 10, GenuineIntel
byteorder : little
LC_ALL : None
LANG : None
LOCALE : None.None
pandas : 1.0.3
numpy : 1.18.1
pytz : 2019.3
dateutil : 2.8.1
pip : 20.0.2
setuptools : 46.1.3.post20200330
Cython : 0.29.15
pytest : 5.4.1
hypothesis : 5.5.4
sphinx : 2.4.4
blosc : None
feather : None
xlsxwriter : 1.2.8
lxml.etree : 4.5.0
html5lib : 1.0.1
pymysql : None
psycopg2 : None
jinja2 : 2.11.1
IPython : 7.13.0
pandas_datareader: None
bs4 : 4.8.2
bottleneck : 1.3.2
fastparquet : None
gcsfs : None
lxml.etree : 4.5.0
matplotlib : 3.1.3
numexpr : 2.7.1
odfpy : None
openpyxl : 3.0.3
pandas_gbq : None
pyarrow : None
pytables : None
pytest : 5.4.1
pyxlsb : None
s3fs : None
scipy : 1.4.1
sqlalchemy : 1.3.15
tables : 3.6.1
tabulate : None
xarray : None
xlrd : 1.2.0
xlwt : 1.3.0
xlsxwriter : 1.2.8
numba : 0.48.0