Skip to content

BUG: TypeError when trying to set values in empty DataFrame using boolean key #10195

Closed
@rekcahpassyla

Description

@rekcahpassyla

Found this bug through #10188 - it caused build failure

import numpy as np
import pandas as pd

pd.show_versions()

df = pd.DataFrame([[2, 2]], index=pd.DatetimeIndex(['2011-01-01']))
df2 = pd.DataFrame([[1, 1]], index=pd.DatetimeIndex(['2011-01-01']))

df[df > df2] = 47

assert np.all(df.values==47)

df = pd.DataFrame()
df2 = pd.DataFrame()

df[df > df2] = 47

results in this error (in both 0.15.2 and 0.16.1)

INSTALLED VERSIONS
------------------
commit: None
python: 2.7.9.final.0
python-bits: 64
OS: Windows
OS-release: 7
machine: AMD64
processor: Intel64 Family 6 Model 26 Stepping 5, GenuineIntel
byteorder: little
LC_ALL: None
LANG: None

pandas: 0.16.1-46-g0aceb38
nose: 1.3.6
Cython: 0.22
numpy: 1.9.2
scipy: 0.14.0
statsmodels: 0.6.1
IPython: 3.1.0
sphinx: 1.3.1
patsy: 0.3.0
dateutil: 2.4.2
pytz: 2015.4
bottleneck: 0.8.0
tables: 3.1.1
numexpr: 2.3.1
matplotlib: 1.4.3
openpyxl: None
xlrd: 0.9.3
xlwt: None
xlsxwriter: 0.7.2
lxml: 3.4.4
bs4: 4.3.2
html5lib: 0.999
httplib2: None
apiclient: None
sqlalchemy: 1.0.4
pymysql: None
psycopg2: None
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
c:\test_set_empty_frame_with_boolean.py in <module>()
     14 df2 = pd.DataFrame()
     15
---> 16 df[df > df2] = 47
     17

c:\python\envs\pandas-0.16.1\lib\site-packages\pandas\core\frame.pyc in __setitem__(self, key, value)
   2119             self._setitem_array(key, value)
   2120         elif isinstance(key, DataFrame):
-> 2121             self._setitem_frame(key, value)
   2122         else:
   2123             # set column

c:\python\envs\pandas-0.16.1\lib\site-packages\pandas\core\frame.pyc in _setitem_frame(self, key, value)
   2153         # df[df > df2] = 0
   2154         if key.values.dtype != np.bool_:
-> 2155             raise TypeError('Must pass DataFrame with boolean values only')
   2156
   2157         self._check_inplace_setting(value)

TypeError: Must pass DataFrame with boolean values only

Proposed #10196

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions