2017-10-30 7 views
-1

複数列にスパークデータフレーム列COLを分割しますそしてM)。 は、必要に応じて、私は、次の形式を持つデータセットの列を有する

もし形式で正確に説明するように、(パンダに)次は私が必要なものを行います。

d3 = df.colname.str.extract('([0-9])([0-9])', expand=True) 
d3.columns = ['H', 'M'] 
df = pd.concat([df, d3]) 

しかし、このシリーズの細胞のかなりの数がちょうど含ま

'XX45M' 
XX3H 

これらのパターンをオプションで抽出してグローバルなdfに挿入する方法はありますか?例の具体的なセットについて

df = pd.DataFrame({'A': ['XX1H30M', 'XX45M', 'XX2H']) 

私はあなたが列を分割することができます

df = df.assign(H=recipes.col.str.extract('([0-9]+)H', expand=False), 
     M=recipes.col.str.extract('([0-9]+)M', expand=False)).fillna(0) 

とパンダで達成することができる必要がある何

Out: 
A H M 
0 XX1H30M 1 30 
1 XX45M 0 45 
2 XX2H 2 0 

として終わるでしょうpysparkに新しいものを追加する:

split_col = pyspark.sql.functions.split(df['col'], '-') 
df = df.withColumn('H', split_col.getItem(0)) 
df = df.withColumn('M', split_col.getItem(1)) 

これを私の場合に拡張します(例: 2列の 'XX2H45M'のようなパターン?

答えて

2

あなたがregexp_extractを使用することができます。

df = spark.createDataFrame(pd.DataFrame({'A': ['XX1H30M', 'XX45M', 'XX2H']})) 

import pyspark.sql.functions as psf 
df.withColumn("H", psf.regexp_extract("A", "([0-9]+)H", 1))\ 
    .withColumn("M", psf.regexp_extract("A", "([0-9]+)M", 1))\ 
    .show() 

    +-------+---+---+ 
    |  A| H| M| 
    +-------+---+---+ 
    |XX1H30M| 1| 30| 
    | XX45M| | 45| 
    | XX2H| 2| | 
    +-------+---+---+ 
+0

これは、私よりも良い答えです - それはpysparkにうまくいっています! –

0

私は単に 'toPandas' でパンダのデータフレームにpyspark RDDを向け、パンダのコマンドを使用しました:pysparkで

df = df.assign(H=recipes.col.str.extract('([0-9]+)H', expand=False), 
    M=recipes.col.str.extract('([0-9]+)M', expand=False)).fillna(0) 
関連する問題