Skip to content

Commit d25e6ca

Browse files
committed
BUG: closes #44312: fixes unwanted TypeError when a missing metadata field is missing
1 parent a3bcbf8 commit d25e6ca

File tree

2 files changed

+14
-0
lines changed

2 files changed

+14
-0
lines changed

pandas/io/json/_normalize.py

+2
Original file line numberDiff line numberDiff line change
@@ -389,6 +389,8 @@ def _pull_field(
389389
try:
390390
if isinstance(spec, list):
391391
for field in spec:
392+
if result is None:
393+
raise KeyError()
392394
result = result[field]
393395
else:
394396
result = result[spec]

pandas/tests/io/json/test_normalize.py

+12
Original file line numberDiff line numberDiff line change
@@ -634,6 +634,18 @@ def test_missing_meta(self, missing_metadata):
634634
expected = DataFrame(ex_data, columns=columns)
635635
tm.assert_frame_equal(result, expected)
636636

637+
def test_missing_nested_meta(self):
638+
# GH44312
639+
# If errors="ignore" and metadata is null, we should it even if it's nested
640+
data = {"a": "foo", "b": None, "c": [{"d": 1}, {"d": 2}]}
641+
result = json_normalize(
642+
data, record_path="c", meta=["a", ["b", "e"]], errors="ignore"
643+
)
644+
ex_data = [["foo", np.nan, 1], ["foo", np.nan, 2]]
645+
columns = ["a", "b.e", "c.d"]
646+
expected = DataFrame(ex_data, columns)
647+
tm.assert_frame_equal(result, expected)
648+
637649
def test_missing_meta_multilevel_record_path_errors_raise(self, missing_metadata):
638650
# GH41876
639651
# Ensure errors='raise' works as intended even when a record_path of length

0 commit comments

Comments
 (0)