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

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

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

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

pandas

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

Q&A

解決済

2回答

1400閲覧

python csvファイル操作におけるデータフレームとは

KKKM

総合スコア16

Python

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

pandas

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

0グッド

0クリップ

投稿2021/01/28 14:38

python
csvファイルの任意の行、列を挿入したいです。
単純に挿入するだけで、特定の値を入れたいとかはありません。

https://note.nkmk.me/python-pandas-assign-append/

上記サイトを参考にしましたがデータフレームという概念を理解できません。

行や列を挿入する際にassign
を使っておりますが、ここでは
上端、左端にラベル?付をして
指定したラベルに要素を追加しているように思います。
このようにラベルをつけず、エクセルシートにあるようなA列の左に列を挿入のようなことはできないのでしょうか。

データフレーム型と言うのもよくわかりませんが、これはCSVファイルの要素をコンマ区切りでリスト化したもののことをいうのでしょうか。

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

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

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

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

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

guest

回答2

0

ベストアンサー

pandas.DataFrameは、二次元の表形式のデータを示す型です。二次元配列(numpy.ndarray)の値(values)を、列名(columns)と行名(index)を付けてアクセスしやすくしたものです。

このようにラベルをつけず、エクセルシートにあるようなA列の左に列を挿入のようなことはできないのでしょうか。

列名を指定しなければ、単純に0から始まる連番が付けられる(エクセルの列番号みたいなものです)ので、「0列の左に新たな列を挿入し、列名を付けなおす」ことで、お望みの結果になります。

Python

1import pandas as pd 2import numpy as np 3 4df = pd.DataFrame(np.arange(12).reshape(3, 4)) # 3行4列のデータフレーム生成 5print(df) 6 7df.insert(0, 'X', np.NaN) # 0列の前にX列を挿入しnp.NaNを設定 8df.columns = range(df.columns.size) # 列名を0から始まる連番に付けなおし 9print(df)

result

1 0 1 2 3 20 0 1 2 3 31 4 5 6 7 42 8 9 10 11 5 0 1 2 3 4 60 NaN 0 1 2 3 71 NaN 4 5 6 7 82 NaN 8 9 10 11 9

投稿2021/01/28 15:19

編集2021/01/29 01:50
Daregada

総合スコア11990

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

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

KKKM

2021/01/30 13:00

ご回答ありがとうございます。 列名や行名は勝手につけられてしまうのでそこは仕方がない。 列名を書きたくない場合は明示的に指定する必要があるという認識でよろしいでしょうか
Daregada

2021/01/30 13:08

> 列名を書きたくない場合は明示的に指定する必要があるという認識でよろしいでしょうか いいえ。 回答のコードの4行目を見ればわかるように、あなたが列名・行名を指定しなければ0, 1, 2と勝手に列名・行名が連番でつきます。Excelだって1, 2, 3とかA, B, Cとか「勝手に付けられている」でしょう。 たいていの場合、それでは扱いづらいので、Excelなら1行目に列名を書いて様々な処理に利用しますし(ソートとかフィルターとかテーブルとか)、DataFrameも好きな列名を付けて処理した方がコードがわかりやすくなります。
KKKM

2021/01/30 13:13

>いいえ。 >回答のコードの4行目を見ればわかるように、あなたが列名・行名を指定しなければ0, 1, 2と勝手に列>名・行名が連番でつきます。Excelだって1, 2, 3とかA, B, Cとか「勝手に付けられている」でしょう。 ご返信ありがとうございます。 上記については 「指定しなければ列名や行名は勝手につけられる」 と同義であるとおもうのですがよろしいでしょうか
Daregada

2021/01/30 13:21

> 「指定しなければ列名や行名は勝手につけられる」 > と同義であるとおもうのですがよろしいでしょうか その通りの文章を書いたのですが、どの部分が不明なんでしょう。 ですから、「列名を書きたくない場合は明示的に指定する必要があるという認識」は間違っていますよね。
Daregada

2021/01/30 13:27 編集

「列名を指定したい」ときには df = pd.DataFrame(np.arange(12).reshape(3, 4), columns=['A', 'B', 'C', 'D']) というように、明示的にcolumnsを指定する必要がありますし、CSVファイルなどから読むときには、先頭行をヘッダー(列名が書いてある行)と見なすかどうかを指定します。
KKKM

2021/01/30 13:39 編集

私が最初に返信した時の引用です >列名や行名は勝手につけられてしまうのでそこは仕方がない。 >列名を書きたくない場合は明示的に指定する必要があるという認識でよろしいでしょうか この一番最初の行は以下と同義のつもりで書いていました > 指定しなければ列名や行名は勝手につけられる これに対して >回答のコードの4行目を見ればわかるように、あなたが列名・行名を指定>しなければ0, 1, 2と勝手に列名・行名が連番でつきます。 とありましたので確認の意味を込めて意見述べました。 列名を書きたくない場合は明示的に指定する必要はあるのではないでしょうか。 記載いただいたコードではnanを使って使って列名を書かないと明示的に指定しているように思っています。 >df.insert(0, 'X', np.NaN) なので 列名を書きたくない場合は明示的に指定する必要があるという認識でよろしいでしょうか という問いに対する答えがいいえという点については納得がいっていません。 おそらく言葉の綾というか僕の表現が悪かったのだとはおもうのですが...
Daregada

2021/01/30 13:49 編集

np.NaNは、列名ではなくて、追加する列のデータですよ。欠損値を意味するnumpyのデータです。先頭の0が挿入位置(既存の列名0の手前)を示しています。 そのコードで列名に当たるのは'X'ですね。ただし、その後の「df.columns = range(df.columns.size)」で列名全体を0から始まる連番に付け直しているので、挿入時の列名は何でも構わないのです。'0'でも'新しい0列になる予定'でも何でも。
KKKM

2021/01/30 14:22

なるほど ご回答ありがとうございます。 おそらく理解できたと思います!
guest

0

なぜか、うまく表示されていなかったので、編集してみます。

データフレームは数理統計解析向けのインタプリタ言語であるR言語のデータ型です。
データフレームの考え方は、データフレームあたりがわかりやすいと思います。
R言語は数理統計解析のためのものですが、データをcsvで入出力することが多いので、それを読み書きする機能をサポートしています。

pythonにRの機能の一部を使えるようにしたのがpandasモジュールです。そのため、pandasはDataFrameという型(クラス)を定義しています。また、R言語に従ってcsvを読み書きする機能をサポートしています。

csvはpythonの型ではなく、一般的なファイルフォーマットです。
Comma-Separated Valuesをご覧ください。

pythonで二次元の表を格納するには、リストのリスト、numpyのndarray、pandasのデータフレームなどがあります。

pythonがcsvファイルを読み込む方法と特長は、こちらで説明しましたが、ここにも再掲しておきます。

  1. テキストファイルとして読み込み、","で区切って要素を取り出し、テキストファイルとして書き出す。数字は自分で変換する。データ形式も自分で決める。
  2. csvモジュールのreaderやwriterを使って読み書きする。数字は自分で変換する。データ形式は通常はリストのリストを使う。
  3. numpyモジュールのloadtxt、savetxtを使う。今回のように、文字列と数字の両方が含まれる場合は、genfromtxtで読み込む。数字は自動的に変換される。データ形式はStructured arrayとなる。
  4. pandasモジュールのread_csvやto_csvを使う。数字は自動的に変換される。データ形式はデータフレームとなる。

csvファイルに行を挿入するだけならどの方法でも問題ないのですが、列を挿入しようとするとpandasのデータフレーム以外の方法では結構手数がかかります。
従って、Daragadaさんはpandasをお勧めしているのだと思います。

投稿2021/01/29 23:39

編集2021/01/30 15:21
ppaul

総合スコア24670

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問