So "_z" is not a keyword, and is a value identifier.
print("_z".isidentifier())
returns True
import keyword
print(keyword.iskeyword("_z"))
returns False
So why is named tuple renaming the column?
Point3D = namedtuple('Point3D', ['x','y','_z'], rename=True)
c = Point3D(10,20,30)
c._fields
returns ('x', 'y', '_2')