pandas: File mode in `to_csv` is ignored, when passing a file object instead of a path
Code Sample, a copy-pastable example if possible
>>> import pandas as pd
>>> df = pd.read_csv("example.csv")
>>> df.head()
just a file
0 1 2 3
1 4 5 6
2 7 8 9
>>> with open("someother.csv", "wb") as f:
... df.to_csv(f, mode="wb")
...
Traceback (most recent call last):
File "<stdin>", line 2, in <module>
File "/usr/lib/python3.6/site-packages/pandas/core/frame.py", line 1524, in to_csv
formatter.save()
File "/usr/lib/python3.6/site-packages/pandas/io/formats/format.py", line 1652, in save
self._save()
File "/usr/lib/python3.6/site-packages/pandas/io/formats/format.py", line 1740, in _save
self._save_header()
File "/usr/lib/python3.6/site-packages/pandas/io/formats/format.py", line 1708, in _save_header
writer.writerow(encoded_labels)
TypeError: a bytes-like object is required, not 'str'
Problem description
When passing a file opened in binary mode to df.to_csv
and also passing mode='wb'
, this mode is ignored. I think it’s because of these lines: https://github.com/pandas-dev/pandas/blob/master/pandas/io/common.py#L407-L411 and these ones: https://github.com/pandas-dev/pandas/blob/master/pandas/io/formats/format.py#L1660-L1662
It seems that is_text
isn’t passed, and so it assumes the default value of True
Expected Output
A file should just be written.
Output of pd.show_versions()
INSTALLED VERSIONS
commit: None python: 3.6.4.final.0 python-bits: 64 OS: Linux OS-release: 4.14.20-1-lts machine: x86_64 processor: byteorder: little LC_ALL: None LANG: en_US.UTF-8 LOCALE: en_US.UTF-8
pandas: 0.22.0 pytest: 3.4.0 pip: 9.0.1 setuptools: 38.5.1 Cython: 0.27.3 numpy: 1.14.0 scipy: 1.0.0 pyarrow: None xarray: None IPython: 6.2.1 sphinx: 1.7.0 patsy: 0.4.1 dateutil: 2.6.1 pytz: 2018.3 blosc: None bottleneck: None tables: None numexpr: None feather: None matplotlib: 2.1.2 openpyxl: None xlrd: None xlwt: None xlsxwriter: None lxml: None bs4: 4.6.0 html5lib: 1.0b10 sqlalchemy: 1.2.3 pymysql: None psycopg2: None jinja2: 2.10 s3fs: 0.1.2 fastparquet: 0.1.3 pandas_gbq: None pandas_datareader: None
About this issue
- Original URL
- State: closed
- Created 6 years ago
- Reactions: 1
- Comments: 21 (9 by maintainers)
I’ve downgraded to 0.23.0 to check, and 0.23.0 works as expected. It appears to be specific to 0.23.1.