• 締切済み

pandas はなぜ列単位で管理している?

pandas の DataFrame は、行(row)単位ではなく列(column)単位で管理していると聞きました。 例えば、df[0] の戻り値は1行ではなく1列です。 行をレコードやオブジェクトとして考えると、行単位での管理が直感的と感じていますが、このように列単位での管理になっているのはなぜでしょうか。 メリットを教えてください。

  • Python
  • 回答数1
  • ありがとう数0

みんなの回答

  • hue2011
  • ベストアンサー率38% (2800/7250)
回答No.1

CSVを自在に扱いたいからです。 そのCSVが何行あるかは改行の数ですから何も気にする必要はありません。 しかし、CSVというのをスペーシングしようとしたら、1行目が2項目しかなくて2行目は10項目あるなんていうデータを扱うのは困難です。 その表は10項目存在していて、たまたま1行目のものには3項目以後がない、ということを判別するためには2行目以降最後の行までみないとわかりません。 そういう扱いをするなら、pdというインスタンスは縦のデータを積み上げるようにしたほうが間違いなく簡単だからです。

sumire_kanou
質問者

補足

※等幅でご覧ください。 次のCSVがあるとします。 a,b,c,d,e 1,2,3,4 A,B,C,D,E x,y,z 改行を記号 \n で表すと a,b,c,d,e\n1,2,3,4\nA,B,C,D,E\nx,y,z\n という1次元のデータ列です。 このCSVをパースして下記のテーブルにするとします。 A列B列C列D列E列 ↓ ↓ ↓ ↓ ↓ +--+--+--+--+--+ |a |b |c |d |e | ← 1行 +--+--+--+--+--+ |1 |2 |3 |4 | | ← 2行 +--+--+--+--+--+ |A |B |C |D |E | ← 3行 +--+--+--+--+--+ |x |y |z | | | ← 4行 +--+--+--+--+--+ pandas は列単位での管理ですので [ [a, 1, A, x], # A列 [b, 2, B, y], # B列 [c, 3, C, z], # C列 [d, 4, D, None], # D列 [e, None, E, None] # E列 ] という構造を持っていると考えています。 ここで、 > CSVというのをスペーシングしようとしたら、 スペーシングとは、パースの間違いでしょうか。 それとも本当に空白を入れる処理のことでしょうか。 > 1行目が2項目しかなくて2行目は10項目あるなんていうデータを扱うのは困難です。 > その表は10項目存在していて、たまたま1行目のものには3項目以後がない、ということを判別するためには2行目以降最後の行までみないとわかりません。 はい。 上記の図でいう、A列、B列、C列 … とすべての列は、CSV の末尾までパースしないと要素が決定できません。 行単位管理であれば、 [ [a, b, c, d, e], # 1行 [1, 2, 3, 4], # 2行 [A, B, C, D, E], # 3行 [x, y, z], # 4行 ] という保持の仕方となり、1行目は次の下線部さえ読めば決定できます。 a,b,c,d,e\n1,2,3,4\nA,B,C,D,E\nx,y,z\n ~~~~~~~~~~~ 列単位の管理であれば、 a,b,c,d,e\n1,2,3,4\nA,B,C,D,E\nx,y,z\n ~~ ~~~~ ~~~~ ~~~~ ~~ の下線部をEOFまで見ないといけません。 質問は「なぜ行単位ではなく列単位で管理しているのか?」です。 ご回答は行と列を取り違えているように感じました。 よろしくお願いします。

関連するQ&A

  • ExcelVBAでデータを一括してセルに貼り付ける

    こんばんは ExcelVBAで教えてください。 配列のデータをセルに貼り付ける方法です。 一つ一つ行う方法は解ります。 しかし、これでは件数が多いと時間がかかってしまいます。 まとめて貼り付ける方法を教えてください。 例えば次のように100列1000行のデータのとき、一つ一つでは10万回も貼り付けることになります。 これを1行単位で1000回とか全部まとめて1回とかでできないでしょうか。 配列データを用意する都合で1行単位もお願いします。 For Row = 1 To 1000 For Column = 1 To 100 Cells(Row, Column).Value = 配列(Row - 1, Column - 1) Next Next

  • エクセル 列のアルファベットを出す方法はありますか?

    行番号を求めるにはrow(セル)で、これに対し列を求める にはcolumn(セル)だと思うのですが、これの出力は数字で、 当該セルが、左から何個目のセルにあるかを出しています。 列番号のアルファベットを出すような関数はありますか? もし出せればindirect関数が使えて便利だなーと思うのですが・・・。 columnを使って便利なようにできますか?

  • 「行」、「列」、「面」次は?

    行列の成分を定義する場合の名称は、例えば2次元行列であれば「行」と「列」、3次元行列であれば「行」と「列」と「面」でいいですよね? 英文マニュアルを読んでいると「row」「column」「plane」の後、「book」「shelf」と続いているのですが、日本の数学会ではどのように呼ぶのが正しいのでしょうか?

  • 複数の列を繋げてA列に入れたい VBA

    aaa aaa  bbb aaa  bbb  ccc aaa (A列にaaa、B列にbbb、C列にcccが入ってます) と言うデータがあるのですが 全てA列に入れて aaa aaabbb aaabbbccc aaa としたいです。 ・最終列は必ずしもCではないのです。(Dの場合もEの場合もある) ・最終行も変化します。 Sub 分かれてる列を繋げる() Dim Col As Long Dim Row As Long For Row = 1 To Range("a65536").End(xlUp).Row   For Col = 1 To Cells(Row, 256).End(xlToLeft).Column    Cells(Row, 1) = Cells(Row, 1) & Cells(Row, 2) & Cells(Row, 3)    Next Col Next Row End Sub をやってみましたが、 aaa aaabbbbbb aaabbbcccbbbcccbbbccc aaa となってしまい、 欲しい結果とは違くなってしまいます。

  • 列の個数、行の個数を取得することは不可能ですか?

    http://okwave.jp/qa/q7981824.html の続きなのですが A1からD5まで値が入っているのに Sub Sampsle() Dim r As Range Set r = ActiveSheet.UsedRange End Sub で値を格納した場合、 列は全部で4つ 行は全部で5つなのですが ウォッチウインドウで確認すると Column : 1 : Long : Module1.Sampsle Row : 1 : Long : Module1.Sampsle になってしまうのですが、 オブジェクトに格納した値から 列の個数、行の個数を取得することは不可能ですか?

  • c# 行と列 どっちが先?

     こんにちは。c#初心者です。  インデクサやメソッドなどで行を表す引数と、列を表す引数のどちらを先に持って来ればよいか分からず質問させてもらいました。  具体的には  int this[int row, int column] { get; set; } なのか、  int this[int column, int row] { get; set: }  なのかで迷っています。最初は前者で作るつもりだったのですが、「TableLayoutControlCollection」によると、  public void Add(Control control, int column, int row)  のようになっており、後者の順だったので分からなくなってしまいました。  どなたかご存知の方がいらっしゃいましたら教えていただけませんか?

  • 異なる単位付き文字列の集計

    表のある列に123mm、1.53m、100ft等のデータがランダムにコラムに入力されているとします。 ピボットテーブル等で各単位別に合計を表示させることは可能でしょうか?計10000mm、120290m、3280ftといったようにです。 単位を数値から切り離すというプロセスはしないという条件で考慮お願いいたします。

  • 10行単位の文字列をランダムに表示するには

    10行単位になっている文字群をランダムに表示したいのですが。 たとえば、文字列や数字の列、スクリプトなどが、10行単位でdata.txtに入っています。 ランダムに、その文字列を10行単位で表示する方法です。 こんな形で、呼び出し行を入れてブラウザに表示したいです。 <?php require("data.txt"); ?> 具体例でいいますと、強大なサイトを数名で作っていて、それぞれのアカウントのアドワース広告をランダムに表示したいなどという場合です。 ひとかたまり10行の広告が7つあれば、70行です。 それをランダムに10行単位で呼び出せば可能かと思うのですが。 バナーやテキストのランダム広告はたくさんありますが、今回のようなものは探してもないので、教えていただけるとありがたいです。 もちろんもっといい方法があれば歓迎です。 よろしくお願いいたします。

    • 締切済み
    • PHP
  • 「Row」と「horizontal」、「Column」と「vertical」

    エクセルでは 列→Column 行→Row だと思っていましたが VBAだけですか? と言うのも 列→VLOOKUP→vertical 行→HLOOKUP→horizontal と一致しないからです。 仕様ですか? よろしくお願いします。

  • 列を削除して行きたい。

    すみません、誰か教えて頂けませんか。 1行目にタイトルが書いてあり、その下が空欄だと 列を削除しようと考えて下記の様に記述しましたが、 2列目しか削除されません。 何か、記述がおかしいのか、他にやり方があるのか 教えて頂けませんでしょうか。 宜しくお願いします。 Co = Cells(1, Columns.Count).End(xlToLeft).Column For ii = 2 To Co If Cells(1, ii).End(xlUp).Row = 1 Then Cells(1, ii).EntireColumn.Delete End If Next ii

専門家に質問してみよう