Pandas実習-行と列データ抽出(loc,iloc)


私はこの雑誌社の「Doit!」です.「データ分析のヴァンダス入門」としての本学習と整理.🐼
実習項目の出所
移動github

資料はここでダウンロードできます.

第二章


2-1データを読み込む

2-2. データの抽出


目次
1.カラムデータの抽出
2.行データの抽出
3.索引と行番号の概念を理解する
4.loc属性を使用して行データを抽出する
5.ilocプロパティを使用して行データを抽出する
6.スライド構文、rangeメソッド

列データの抽出


データフレームから列単位データを抽出するには、角カッコと列名を使用します.カラム名には引用符を使用する必要があります.
以前に使用したデータはgapminderです.
import pandas as pd
df = read_csv('..경로/gapminder.tsv', sep='\t')

こんなに長いです.
その過程がよくわからなかったら?👉 クリック

1.countryという名前のカラムを抽出して保存

country_df = df['country']
print(type(country_df))
print(country_df.head())
print(country_df.tail())
Notebookはprintを使用せず、変数名を入力するだけで値を通知します.ただし、1つのshellで出力する場合はprint構文を使用する必要があります.

列のプロパティ、前の5行と後の5行の結果が表示されます.
データフレームからカラムが抽出された以上、シーケンスであるべきである.だからSeriesとして表示され、5つごとにインデックス番号とどの値が表示されますか.

2.複数の列の抽出


country,control,yearの3つの列を抽出します.
subset = df[['country', 'continent', 'year']]
print(type(subset))
print(subset.head())
print(subset.head())

複数のカラムを抽出する場合、データフレームのプロパティはシリーズではありません.これは、抽出されたカラムの値が良好であることを示します.
表を見たい場合はprintを削除して1つずつ実行します.Dataframeデータ型はテーブルによって自動的に表示されます.データの可視化に特化したノートブックPC📚.

シリーズとデータフレームとは何か分からない場合は?👉 クリック

行データの抽出


列に並びました.列にも並びましょう.
動作単位を抽出するには、loc、ilocというプロパティを使用する必要があります.
属性説明に基づくlocインデックス抽出行データiloc行番号抽出行データに基づく
パンダの勉強で一番混同された部分だと思います
私はパンダしか習っていませんが、最初はインデックスが何なのか、インデックスと行の違いが分かりませんでした.インデックスが0から始まるのを知らずに勉強しました
でも、Pythonを勉強してから、もちろんpandasをしなければならないと今感じました.私のように急いで帰らないで、少なくともpython資料型をゆっくり勉強してから来ることをお勧めします.皆さんは最初から勉強している私を見て知っていると思います.以下省略する.

索引と行番号の概念について

print(df.head())
dfを呼んでみてください.

一番左の列を見てください.
0から始まる値が表示されます.これがインデックスです.インデックスは通常0から始まります.データを削除または追加すると、インデックスが変わります.数値ではなく文字列に変更することもできます.
つまり、インデックス名を変更することができます.逆に、行番号はデータの順序を示す一意の属性です.インデックスが変更されたからといって、行番号が変更されるわけではありません.
行番号は、順序を示す整数です.実際のデータフレームに表示される値ではなく、データを抽出するために使用します.

locプロパティを使用して行データを抽出する


1.locを使用して行データを抽出する

print(df.loc[0])

かっこの値はインデックス値です.インデックス0は最初のローです.
インデックス0=最初の行
では、このコードは何を出力しますか?
print(df.loc[-1])
KeyError: -1
最後の行を見せてあげると思いますが、そうではありません.エラー名もKeyErrorです.つまり、loc属性に-1というキーがないのに、なぜ書くのか...そういう意味でしょうlocはインデックスに基づいてローを抽出するからです.インデックスには負の属性がありません.
-1で最後の行を抽出し、後で出ます.

2.最後の行を抽出する方法


locを使用して最後のローを抽出する場合は、最後のインデックス番号を決定する必要があります.
その前にshapeを勉強しました.行と列の情報を教えてくれます.shapeは(行数、列数)を教えるやつです.
print(df.shape) # 행과 열의 개수를 알려줌
print(df.shape[0]) # 행 개수만 알려줌
結果は.
(1704, 6)
1704
現れる.最後のインデックスが分かった以上、最後のローを抽出できます.
print(df.loc[1704])
これでまたkeyerrorが出てきます(だって....再び戻り、shapeは行数です.1704行です.インデックスは0から始まります.だから1703を
print(df.loc[1703])

他の方法も紹介されている.
num_rows = df.shape[0]
last_index = num_rows -1
print(df.loc[last_index])

...疲れてゆく

3.tailメソッドを使用して最後の行を抽出


tail()のデフォルトプロパティは、最後の5行を抽出し、カッコに数字を入力すると、最後の行に基づいて数値が抽出されます.直接数字を入力してもよいし、n=1で記入してもよい.
print(df.tail(1))

表示形式が異なります.どうして違うの?locプロパティを使用して抽出されるデータ型はシリーズであり、tailはデータフレームのプロパティです.

4.特定のインデックスの抽出

print(df.loc[[0,99,999]])

よく吸った!

ilocプロパティを使用して行データを抽出する


1.ilocを使用してローを抽出


ilocとlocの違いは、ilocが行番号を使用してデータを抽出することです.
print(df.iloc[1])
print(df.iloc[99])

このデータの行番号とインデックス番号は同じであることに注意してください.

2.負数のilocを使用可能

print(df.iloc[-1])
これにより、最後のローが抽出されます.

行数は1704個です.行番号はインデックスと同じように0で始まることに注意してください.

3.ilocで一度にゲラニゥムを抽出

print(df.iloc[[0,99,999]])

loc、ilocプロパティの使用方法


この2つのプロパティをよりよく使用するには、抽出するデータの行と列を指定します.
df.loc[行],[列])
df.iloc[行],[列])
スライド構文とrangeメソッドを使用して、行と列を指定できます.

1.スライス構文を使用したデータの抽出


すべての行データのyear、pop列
  • の抽出方法👉 :
  • subset = df.loc[:, ['year', 'pop']]
    print(subset.head())
    subset = df.iloc[:, [2,4,-1]]
    print(subset.head())

    違いは感じられますか?行の条件は、すべての行を抽出する条件":"と同じです.列が少し違います.locは「」にカラム名を指定し、ilocにカラム番号を指定します.
    locとilocは異なるカラム属性を有する.
    loc 👉 文字列リスト
    iloc 👉 整数リスト

    2.rangeメソッドによるデータ抽出


    rangeプロパティについて少し理解する必要があります.rangeメソッドは指定した整数リストを返すようですが、ジェネレータが返されます.
    ilocプロパティはjner layerプロパティであり、データを抽出できないためlistに変換する必要があります.
    list(range(5))
    その通りです.リストに変換するとilocのカラム属性値に入ります.
    small_range = list(range(5))
    print(small_range)
    print(type(small_range))
    
    [0,1,2,3,4]
    <class 'list'>
    subset =df.iloc[:, small_range]
    print(subset.head())

    3.使用範囲


    range(0,6,2)を使用します.0から5のバーから2をスキップしたサードパーティが作成され、リストに変換されます.
    small_range = list(range(0,6,2))
    subset =df.iloc[:, small_range]
    print(subset.head())

    4.スライド構文とrangeメソッドの比較


    でもrangeを使うのは不便ですだから私はグライダーのフレーズが好きです.
    list(range(5))を使用する値は[:5]と同じです.
    subset = df.iloc[:, :5]
    print(subset.head())

    5. 0:6:2


    ではlist(range(0,6,2)はどのように表現されているのでしょうか.スライド文法はこうです.👉 [0:6:2]
    subset =df.iloc[:, 0:6:2]
    print(subset.head())

    6.loc、iloc属性の自由使用


    ilocプロパティを使用して、0、999999行目の0、3、5列目のデータを抽出します.
    print(df.iloc[[0,99,999], [0,3,5]])

    7.6番目のlocからデータをロードしてみる


    ilocは使いやすいですが、後でコードだけを表示すると、どのデータがロードされているか分からないかもしれません.locはカラム名を使用するので、どのデータがロードされているか一目でわかります.
    print(df.loc[[0,99,999], ['country', 'lifeExp', 'gdpPercap']])

    複数行と複数列を抽出する場合は、四角カッコも必要です.

    8.インデックスが10~13行の国、lifeExp、gdpPercap列のデータを抽出するコード


    自分でやりましょう~
    print(df.loc[[10:13],['country', 'lifeExp', 'gdpPercap']])
    私はまた間違いを...
    以上のコードは無効です.行番号が括弧に入っているので^^...
    print(df.loc[10:13,['country', 'lifeExp', 'gdpPercap']])
    もう直しました.気まずい🤣)

    こうしてloc、ilocの長い旅は終わりました!