pythonでcsvファイルを読み込むがEXCELファイルに変換したときにカンマ区切りになりません。
csvファイルに3列のデータがある(セルで表すとA1:C15)のですがEXCELファイルに変換すると
EXCELファイルのA1にcsvファイルのA1とA2とA3がそのまま反映されてセルごとに反映されません。
以下にコードを示します。ご教示をお願いします。
import pandas as pd
df = pd.read_csv("7.csv",encoding="utf-16")
print(df)
df.to_excel("7.xlsx")
別件の追記で申し訳ないのですがこのディレクトリには7.csvのほかにも連番のcsvファイルが複数存在し一度に読み込みを読み込ませたいです。
そうした場合にこのデータが入っているディクトリをカレントディレクトリにして読み込むコードをご教示をお願いしたいです。こちらの方は丸投げになっていしまうので申し訳ありません。
そのcsvファイルは本当にUTF-16のファイルですか?
print(df)の出力はどのようになっていますか?
実行結果を下記に示します。
C:\Users\nao\AppData\Local\Programs\Python\Python35\python.exe C:/Users/nao/Desktop/pppp/データ変換.py
1001\t1515\t16550
0 1002\t1516\t16552
1 1003\t1517\t16554
2 1004\t1518\t16556
3 1005\t1519\t16558
4 1006\t1520\t16560
5 1007\t1521\t16562
6 1008\t1522\t16564
7 1009\t1523\t16566
8 1010\t1524\t16568
9 1011\t1525\t16570
10 1012\t1526\t16572
11 1013\t1527\t16574
12 1014\t1528\t16576
13 1015\t1529\t16578
回答ほここではなく、質問を編集して追加してください。他の見に来た人にもわかりやすいように。
たぶん、そのCSVファイルは、UTF-16のデータではありません。 UTF-16を指定しているのはなぜですか?
数値だけであれば、たぶん何も指定しなくてもいいと思うので、encoding="utf-16" の指定を無くして実行してみるとどうなりますか?
指定しないとエラーが出てしまします。
指定をなくしたものを下記に示します。
C:\Users\nao\AppData\Local\Programs\Python\Python35\python.exe C:/Users/nao/Desktop/pppp/データ変換.py
Traceback (most recent call last):
File "C:/Users/nao/Desktop/pppp/データ変換.py", line 2, in <module>
df = pd.read_csv("7.csv")#,encoding="utf-16")
File "C:\Users\nao\AppData\Roaming\Python\Python35\site-packages\pandas\io\parsers.py", line 678, in parser_f
return _read(filepath_or_buffer, kwds)
File "C:\Users\nao\AppData\Roaming\Python\Python35\site-packages\pandas\io\parsers.py", line 440, in _read
parser = TextFileReader(filepath_or_buffer, **kwds)
File "C:\Users\nao\AppData\Roaming\Python\Python35\site-packages\pandas\io\parsers.py", line 787, in __init__
self._make_engine(self.engine)
File "C:\Users\nao\AppData\Roaming\Python\Python35\site-packages\pandas\io\parsers.py", line 1014, in _make_engine
self._engine = CParserWrapper(self.f, **self.options)
File "C:\Users\nao\AppData\Roaming\Python\Python35\site-packages\pandas\io\parsers.py", line 1708, in __init__
self._reader = parsers.TextReader(src, **kwds)
File "pandas\_libs\parsers.pyx", line 539, in pandas._libs.parsers.TextReader.__cinit__
File "pandas\_libs\parsers.pyx", line 767, in pandas._libs.parsers.TextReader._get_header
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
UTF-8だとして読もうとしても読めないようですね。
もしかして、そのCSVはExcelで作ったUTF-8 のCSVですか? だとすると、BOM付きUTF-8になっていると思うので、encoding="utf_8_sig" を指定するといいかもしれません。
いずれにしても、そのCSVファイルのencodeを調べて、それに合ったencodingを指定してください。
最近のエディタで開けばわかるはずです。
(1)Wikipediaのバイト順マークのページによるとBOMで先頭が0xFFになるのはUTF-16かUTF-32ということです。データは読めていますしUTF-16指定でいいのではないでしょうか。
(2)[pandasでcsv/tsvファイル読み込み(read_csv, read_table)](https://note.nkmk.me/python-pandas-read-csv-tsv/)
によるとread_csvのデフォルトの区切り文字はカンマだそうです。貼られた実行結果からそのcsvファイルの区切り文字はタブであることがわかります。区切り文字を指定するかread_tableのほうを使うかすればよさそうです。
あなたの回答
tips
プレビュー