すべてのプロダクト
Search
ドキュメントセンター

:PyODPS 列操作

最終更新日:Jul 18, 2026

PyODPS を使用して MaxCompute テーブルに対して列操作を実行します。これには、NULL 値チェック、条件付きロジック、算術演算、コレクション型の処理が含まれます。

前提条件

次の手順を完了してください。

  • MaxCompute を有効化します。

  • DataWorks を有効化します。

  • DataWorks にワークフローを作成します。この例では、基本モードのワークスペースを使用します。

操作手順

  1. テストデータセットをダウンロードし、MaxCompute にインポートします。

    1. Iris データセットをダウンロードして解凍します。iris.data ファイルを iris.csv に名前変更します。

    2. pyodps_iris という名前のテーブルを作成し、iris.csv データセットをアップロードします。詳細については、「テーブルの作成とデータのアップロード」をご参照ください。

      次の文を使用してテーブルを作成します。

      CREATE TABLE if not exists pyodps_iris
      (
      sepallength  DOUBLE comment 'Sepal length (cm)',
      sepalwidth   DOUBLE comment 'Sepal width (cm)',
      petallength  DOUBLE comment 'Petal length (cm)',
      petalwidth   DOUBLE comment 'Petal width (cm)',
      name         STRING comment 'Species'
      );
  2. DataWorks コンソールにログインし、左上隅でリージョンを選択します。

  3. 左側のナビゲーションウィンドウで、ワークスペース をクリックします。

  4. 対象のワークスペースの 編集 列で、[移動] > データ開発 を選択します。

  5. [Data Development] ページで、作成済みのワークフローを右クリックし、ノードの新規作成 > MaxCompute > [PyODPS 2] を選択します。

  6. [ノードの新規作成] ダイアログボックスで、ノード名を入力し、確認 をクリックします。

  7. PyODPS ノードにサンプルコードを入力します。

    from odps import DataFrame
    import numpy as np
    import pandas as pd
    
    iris = DataFrame(o.get_table('pyodps_iris'))
    
    # NULL 値をチェックします。
    print iris.sepallength.isnull().head(5)
    
    # 条件付きロジック。
    print (iris.sepallength > 5).ifelse('gt5','lte5').rename('cmp5').head(5)
    
    # 複数の条件。
    print iris.sepallength.switch(4.9,'eq4.9',5.0,'eq5.0',default='noeq').rename('equalness').head(5)
    from odps.df import switch
    print switch(iris.sepallength == 4.9,'eq4.9',iris.sepallength == 5.0,'eq5.0',default='noeq').rename('equalness').head(5)
    
    # 条件に基づいて列の一部を更新します。
    iris[iris.sepallength > 5,'cmp5'] = 'gt5'
    iris[iris.sepallength <=5,'cmp5'] = 'lte5'
    print iris.head(5)
    
    
    # 算術演算。
    print (iris.sepallength * 10).log().head(5)
    fields = [iris.sepallength,(iris.sepallength /2).rename('sepallength/2'),(iris.sepallength ** 2).rename('sepallength_squared')]
    print iris[fields].head(5)
    print  (iris.sepallength < 5).head(5)
    
    
    
    # コレクション型に対する操作。
    data = {'id': [1,2], 'a': [['a1','b1'],['c1']], 'b': [{'a2': 0, 'b2': 1, 'c2': 2},{'d2': 3, 'e2': 4}]}
    df = pd.DataFrame(data)
    print df
    
    df1 = DataFrame(df, unknown_as_string=True, as_type={'a': 'list<string>','b' : 'dict<string,int64>'})
    print df1.dtypes
    print df1.head()
    
    print df1[df1.id,df1.a[0],df1.b.len()].head()
    print df1.a.explode().head()
    print df1.a.explode(pos=True).head()
    print df1.b.explode().head()
    print df1.b.explode(['key','value']).head()
    
    # explode を使用して他の列とともに複数行を出力します。
    print df1[df1.id,df1.a.explode()].head()
    
    # isin、notin、および cut 操作。
    
    # isin 操作は、シーケンス内の要素が指定されたセットに含まれているかどうかをチェックします。notin 操作はその逆です。
    print iris.sepallength.isin([4.9,5.1]).rename('sepallength').head()
    
    # cut 操作はデータを指定されたビンに離散化します。
    print iris.sepallength.cut(range(6),labels=['0-1','1-2','2-3','3-4','4-5']).rename('sepallength_cut').head(5)
    
    # include_under および include_over パラメーターは、最も低い境界値未満および最も高い境界値を超える値を含めます。
    labels = ['0-1', '1-2', '2-3', '3-4', '4-5', '5-']
    iris.sepallength.cut(range(6), labels=labels, include_over=True).rename('sepallength_cut').head(5)
  8. [実行] をクリックします。

  9. [運用ログ] タブで結果を確認します。