question-mark
Stuck on an issue?

Lightrun Answers was designed to reduce the constant googling that comes with debugging 3rd party libraries. It collects links to all the places you might be looking at while hunting down a tough bug.

And, if you’re still stuck at the end, we’re happy to hop on a call to see how we can help out.

DataFrame.iat will create new column if .iat is used to set None on int Series

See original GitHub issue

Code Sample, a copy-pastable example if possible

>>> df = pd.DataFrame({'a':[0,1],'b':[4,5]})
>>> df
   a  b
0  0  4
1  1  5
>>> df.iat[0, 0] = None
>>> df
   a  b   0
0  0  4 NaN
1  1  5 NaN

Problem description

This is problematic for multiple reasons.

  • inconsistency between iloc and iat.
  • creation of a brand new column is almost surely not the intended/expected behavior
  • At the very least, I would expect it to simply bail on the operation with a warning about incompatible types.

This is likely related to the non-intuitive behavior of Series which has already been documented here: https://github.com/pandas-dev/pandas/issues/20643#issuecomment-431244590

Expected Output

I would expect it to do what it does when using .iloc:

>>> df = pd.DataFrame({'a':[0,1],'b':[4,5]})
>>> df
   a  b
0  0  4
1  1  5
>>> df.iloc[0, 0] = None
>>> df
     a  b
0  NaN  4
1  1.0  5

Output of pd.show_versions()

INSTALLED VERSIONS ------------------ commit: None python: 3.6.6.final.0 python-bits: 64 OS: Linux OS-release: 3.13.0-24-generic machine: x86_64 processor: x86_64 byteorder: little LC_ALL: None LANG: en_US.utf8 LOCALE: en_US.UTF-8

pandas: 0.22.0 pytest: None pip: 9.0.3 setuptools: 39.0.1 Cython: 0.27.3 numpy: 1.14.0 scipy: 1.0.0 pyarrow: None xarray: None IPython: None sphinx: None patsy: 0.5.0 dateutil: 2.6.1 pytz: 2017.3 blosc: None bottleneck: None tables: None numexpr: None feather: None matplotlib: None openpyxl: None xlrd: None xlwt: None xlsxwriter: None lxml: None bs4: None html5lib: None sqlalchemy: None pymysql: None psycopg2: None jinja2: None s3fs: 0.1.2 fastparquet: None pandas_gbq: None pandas_datareader: None

Issue Analytics

  • State:closed
  • Created 5 years ago
  • Comments:5 (2 by maintainers)

github_iconTop GitHub Comments

2reactions
mroeschkecommented, Oct 22, 2018

iat indexes by integer position and not label, so it shouldn’t matter if 0 is not in the columns; it should modify the value in row 0 column A

IIRC iat and at doesn’t perform as many data validation checks, so this may be a “fallback” assignment and broadcasting.

1reaction
aditya0811commented, Oct 22, 2018

I think we can conclude that as df.iat is capable of creating and setting values,it will create index for 0 which is not present as column index(a,b). We cannot access those values using iat if column index are char type.

Read more comments on GitHub >

github_iconTop Results From Across the Web

pandas: Get/Set element values with at, iat, loc, iloc - nkmk note
Use at, iat, loc, or iloc to access data at any location in pandas.DataFrame and get/set values. Write at[], not at().pandas.
Read more >
pandas loc vs. iloc vs. at vs. iat? - python - Stack Overflow
iloc - selects subsets of rows and columns by integer location only. I almost never use .at or .iat as they add no...
Read more >
pandas.DataFrame.iat — pandas 0.23.1 documentation
Access a single value for a row/column pair by integer position. ... Use iat if you only need to get or set a...
Read more >
Python | Pandas Dataframe.iat[ ] - GeeksforGeeks
Pandas iat [] method is used to return data in a dataframe at the ... it can be seen that the Value of...
Read more >
A clear explanation of the Pandas index - Sharp Sight
These integer locations for the rows and columns start at zero. So the first column will have an integer location of 0, the...
Read more >

github_iconTop Related Medium Post

No results found

github_iconTop Related StackOverflow Question

No results found

github_iconTroubleshoot Live Code

Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free

github_iconTop Related Reddit Thread

No results found

github_iconTop Related Hackernoon Post

No results found

github_iconTop Related Tweet

No results found

github_iconTop Related Dev.to Post

No results found

github_iconTop Related Hashnode Post

No results found