The pyjanitor clean_names method performs a bunch of regex .str.replace(..) calls, including with this regex, which is not supported by pyarrow:
>>> ser = pd.Series(['a@b', 'c@'], dtype='str')
>>> ser.str.replace('(?<=\\w)@(?=\\w)', '_', regex=True)
...
ArrowInvalid: Invalid regular expression: invalid perl operator: (?<=
>>> ser = ser.astype(pd.StringDtype(storage="python"))
>>> ser.str.replace('(?<=\\w)@(?=\\w)', '_', regex=True)
0 a_b
1 c@
dtype: string