質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

1回答

19366閲覧

pandasでLength mismatchがでる & 列名が反転

__PORNO___

総合スコア10

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

1グッド

2クリップ

投稿2019/09/12 04:53

###理想のデータの形
,タイトル,作者
0,あああ,太郎
1,いいい,花子
2,ううう,雄太

###コード

python

1if os.path.exists('./Data/books.csv'): # 存在するとき。CSVをリストに変換 2 csv_file = pd.read_csv('./Data/books.csv', encoding="utf_8_sig") 3 csv_list = csv_file.values.tolist() # 行名列名を含まないデータ部分をリストに変換 4else: 5 csv_list = [] 6 7csv_list.append([title, author]) 8 9df = pd.DataFrame(csv_list) # 二次元配列をDataFrameに変換。 10df.columns = {'タイトル', '作者'} # エラーメッセージはここがおかしいと言っています。 11df.drop_duplicates(subset="タイトル", keep="first") # タイトル重複を削除 12df.to_csv('./Data/books.csv', mode='w', encoding='utf_8_sig') # 上書き

###エラー

python

1ValueError: Length mismatch: Expected axis has 3 elements, new values have 2 elements

###得られたデータ
,作者,タイトル
0,あああ,太郎
1,いいい,花子
2,ううう,雄太
###環境
Python3.7.4
pandas0.25.1

ご教授お願いします。

DrqYuto👍を押しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

1. エラーが出る原因

CSVデータの読み込み部

Python

1csv_file = pd.read_csv('./Data/books.csv', encoding="utf_8_sig")

にて読み込まれたDataFrame(csv_file)では、本来は "Index" として扱われるべき1列目が "データ" として扱われてしまいます。
その結果 作成される DataFrame(df) も [0(元Indexデータ), "タイトル", "作者"] の3列のデータとなってしまいます。
にも関わらず

Python

1df.columns = {'タイトル', '作者'}

の部分にて2列分のColumn名を与えている為 "ValueError"(データは3列あるのに列名は2つしか与えられてないぞゴラー:意訳) が発生しております

対策としては、

Python

1csv_file = pd.read_csv('./Data/books.csv', encoding="utf_8_sig", index_col=0)

のように1列目をIndex列であると明示することで2列のデータとしてよみこまれるかと思います。

2. 順番がおかしくなる原因

  1. と同様にColumn名を与えている

Python

1df.columns = {'タイトル', '作者'}

の部分にて、Column名{'列1の名前', '列2の名前'}を set型で与えておりますが、set型は順番情報を持たない型となりますので、どの列にどの名前が適用されるかの保証がありません。
ここは素直に順番情報を持つList型で

Python

1df.columns = ['タイトル', '作者']

とするべきかと思います。

投稿2019/09/12 07:02

magichan

総合スコア15898

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

__PORNO___

2019/09/12 08:35

はー!なるほど。助かりました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問