Skip to content

Commit 19391f8

Browse files
committed
Adding a warning when dropping NA values for panel.to_frame pandas-dev#7879
1 parent 989a51b commit 19391f8

File tree

2 files changed

+34
-1
lines changed

2 files changed

+34
-1
lines changed

pandas/core/panel.py

+3
Original file line numberDiff line numberDiff line change
@@ -858,6 +858,9 @@ def to_frame(self, filter_observations=True):
858858
mask = com.notnull(self.values).all(axis=0)
859859
# size = mask.sum()
860860
selector = mask.ravel()
861+
if not np.all(selector):
862+
warnings.warn("NaN values found\
863+
empty values will be dropped", RuntimeWarning)
861864
else:
862865
# size = N * K
863866
selector = slice(None, None)

pandas/tests/test_panel.py

+31-1
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import nose
66

77
import numpy as np
8-
8+
import warnings
99
from pandas import Series, DataFrame, Index, isnull, notnull, pivot, MultiIndex
1010
from pandas.core.datetools import bday
1111
from pandas.core.panel import Panel
@@ -1556,6 +1556,36 @@ def test_to_frame_multi_drop_level(self):
15561556
expected = DataFrame({'i1': [1., 2], 'i2': [1., 2]}, index=exp_idx)
15571557
assert_frame_equal(result, expected)
15581558

1559+
def test_to_frame_na_drop_warnings(self):
1560+
def create_a_panel_with_na_vals(filter_observations=True):
1561+
df1 = DataFrame(np.random.randn(2, 3), columns=['A', 'B', 'C'],
1562+
index=['foo', 'bar'])
1563+
df2 = DataFrame(np.random.randn(2, 3), columns=['A', 'B', 'C'],
1564+
index=['foo', 'bar'])
1565+
df2.loc['foo', 'B'] = np.nan
1566+
dict_with_dropped_vals = {'df1': df1, 'df2': df2}
1567+
Panel(dict_with_dropped_vals).\
1568+
to_frame(filter_observations=filter_observations)
1569+
1570+
def create_a_panel_without_na_vals(filter_observations=True):
1571+
df1 = DataFrame(np.random.randn(2, 3), columns=['A', 'B', 'C'],
1572+
index=['foo', 'bar'])
1573+
df2 = DataFrame(np.random.randn(2, 3), columns=['A', 'B', 'C'],
1574+
index=['foo', 'bar'])
1575+
dict_with_dropped_vals = {'df1': df1, 'df2': df2}
1576+
Panel(dict_with_dropped_vals).\
1577+
to_frame(filter_observations=filter_observations)
1578+
with warnings.catch_warnings(record=True) as w:
1579+
warnings.simplefilter("always")
1580+
create_a_panel_with_na_vals()
1581+
create_a_panel_with_na_vals(False)
1582+
create_a_panel_without_na_vals()
1583+
create_a_panel_without_na_vals(False)
1584+
self.assertEqual(len(w), 1)
1585+
self.assertTrue(issubclass(w[0].category, RuntimeWarning))
1586+
self.assertEqual(str(w[0].message),
1587+
"NaN values found, empty values will be dropped")
1588+
15591589
def test_to_panel_na_handling(self):
15601590
df = DataFrame(np.random.randint(0, 10, size=20).reshape((10, 2)),
15611591
index=[[0, 0, 0, 0, 0, 0, 1, 1, 1, 1],

0 commit comments

Comments
 (0)