we should use keyword only arguments for some of our functions that have large numbers of kwargs to make it harder to make mistakes in the calling conventions, a prime example is [read_csv](https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html?highlight=read_csv#pandas.read_csv].

likely we want a signature

def read_csv(self, filepath_or_buffer, *, .......

IOW all args, except for the first should be kwargs.

We could further modify a fair number of functions, so will treat this as a tracking issue.

Comment From: WillAyd

Good idea - is this supported in Py3.5?

Comment From: jreback

Good idea - is this supported in Py3.5?

yes

Comment From: alexitkes

I like this. I can try for read_html, read_json and some other I/O functions. Should all optional arguments be keyword-only?

Comment From: simonjayhawkins

isn't this a breaking api change?

Comment From: jreback

isn't this a breaking api change?

yes, but IMHO a minor one, you almost always use keyword args with the functions with many args anyhow

Comment From: simonjayhawkins

isn't this a breaking api change?

yes, but IMHO a minor one, you almost always use keyword args with the functions with many args anyhow

so if we go for straight break, we should do this for 1.0?

Comment From: jreback

yes this would be for 1.0

Comment From: TomAugspurger

For posterity, in https://github.com/pandas-dev/pandas/pull/27573 we're using a decorator to deprecate passing keyword arguments positionally. This not be API breaking.

Comment From: jbrockmendel

we've done a lot of this and have gotten into the habit. closing as complete.