Pandas DataFrame文字列を別々の行に分割する方法 -- python フィールド と pandas フィールド 関連 問題

How to split by range of characters pandas dataframe string into separate rows












0
vote

問題

日本語

あなたは以下のコードで私を助けてもらえますか?私はできる限りSraightとSimple Bemをベムしようとします。

  1. これは私のdf
  2. の抽出です

    イメージの説明を入力します。ここで

    1. SB文字列が常に7文字(7,14,21,28)で繰り返すことを見たので、私は以下のコードでそれを構築しました。
    2. <コード> df_split = df_excelsb_melt[df_excelsb_melt['SB'].str.len() > 7] df_split['SB'].str.len().unique()

      OUT PUTは:

      アレイ([14,21,28]、DTYPE = INT64)

      3)私がやろうとしたこと:

      <コード> explode(df_split.assign(SB=df_split.SB.str.split(range(0,df_split.SB.str.len(),7)),'SB')

      OUT PUTは次のとおりです。 SyntaxError:解析中の予期しないEOF

      1. コードが何をしたのか:
      2. 画像の説明を入力しますここで

        上記のところ、コードは7文字にSB列を分割する必要があります。

        事前にありがとうございました。

英語

Could you please help me with below code? I will try to bem sraight and simple as much as i can.

  1. This is an extract of my df

enter image description here

  1. I have built it with below code, because i saw that SB string repeat always with 7 character (7, 14, 21 and 28).

df_split = df_excelsb_melt[df_excelsb_melt['SB'].str.len() > 7] df_split['SB'].str.len().unique()

Out put was:

array([14, 21, 28], dtype=int64)

3)What i've tried to do:

explode(df_split.assign(SB=df_split.SB.str.split(range(0,df_split.SB.str.len(),7)),'SB')

out put was: SyntaxError: unexpected EOF while parsing

  1. What the code shoud have done:

enter image description here

The above being said, the code should have split SB column in 7 characters.

Thanks in advance.

</div
     

回答リスト

1
 
vote
vote
ベストアンサー
 

編集

<コード> regex :

を使用した単純な解決策 <事前> <コード> import re import pandas as pd data = [{'MOD': 42334, 'SB': '38-101138-3015', 'AC': 'AAA', 'COMPLIANCE': 'NOT INCORPORATED'}, {'MOD': 43765, 'SB': '49-300949-3012', 'AC': 'AAA', 'COMPLIANCE': 'NOT INCORPORATED'}] df = pd.DataFrame(data) df['SB'] = df['SB'].apply(lambda x : re.findall('.{1,7}', x)) df = df.explode('SB')

出力

<事前> <コード> | MOD | SB | AC | COMPLIANCE | |------:|:--------|:-----|:-----------------| | 42334 | 38-1011 | AAA | NOT INCORPORATED | | 42334 | 38-3015 | AAA | NOT INCORPORATED | | 43765 | 49-3009 | AAA | NOT INCORPORATED | | 43765 | 49-3012 | AAA | NOT INCORPORATED |

原稿解決

df.iterrows() および<コード> regex の組み合わせ付き

<事前> <コード> output = [] #Loop through the records for record in df.to_dict('records'): #Find the SB codes with some regex logic for x in re.findall('.{1,7}', record['SB']): temp = record.copy() temp['SB'] = x #Append to the output list output.append(temp) new_df = pd.DataFrame(output)

 

EDIT

A simple solution using regex:

import re import pandas as pd  data = [{'MOD': 42334,   'SB': '38-101138-3015',   'AC': 'AAA',   'COMPLIANCE': 'NOT INCORPORATED'},  {'MOD': 43765,   'SB': '49-300949-3012',   'AC': 'AAA',   'COMPLIANCE': 'NOT INCORPORATED'}]  df = pd.DataFrame(data)  df['SB'] = df['SB'].apply(lambda x : re.findall('.{1,7}', x)) df = df.explode('SB') 

Output

|   MOD | SB      | AC   | COMPLIANCE       | |------:|:--------|:-----|:-----------------| | 42334 | 38-1011 | AAA  | NOT INCORPORATED | | 42334 | 38-3015 | AAA  | NOT INCORPORATED | | 43765 | 49-3009 | AAA  | NOT INCORPORATED | | 43765 | 49-3012 | AAA  | NOT INCORPORATED | 

Original solution

With a combination of df.iterrows() and regex :

output = []  #Loop through the records for record in df.to_dict('records'):     #Find the SB codes with some regex logic     for x in re.findall('.{1,7}', record['SB']):         temp = record.copy()         temp['SB'] = x         #Append to the output list         output.append(temp)          new_df = pd.DataFrame(output) 
</div
 
 

関連する質問

0  シリーズの真理値はあいまいです。このエラーを解決する方法[複製]  ( The truth value of a series is ambiguous how do i fix this error ) 
この質問はすでにここで回答を持っています シリーズの真理値はあいまいです。 a.Empty、a.bool()、a.item()、a.any()またはa.all()を使用してください。 ...

2  Pandas GroupByとセレクターの順序  ( Pandas groupby and selector order ) 
3列のデータフレームを持っているとします: <事前> <コード> Criteria Group Value 0 A 0 0.1 1 B 0 0.2 2 B 1 0....

8  Pandas DataFrameへの変更率を追加します  ( Add rate of change to pandas dataframe ) 
次のPandas DataFrame: <事前> <コード> lastrun value 0 2013-10-24 13:10:05+00:00 55376 ...

2  パンダの行を変更します  ( Change rows in pandas ) 
Pandasデータフレームにマトリックスを持っています <事前> <コード> print dfMatrix 0 1 2 3 4 0 10000 10 8 11 ...

1  タプルを鍵と値として辞書するPandas DataFrame  ( Pandas dataframe to dictionary with tuples as key and values ) 
私は以下の手助けが必要です: 私は以下のようにCSVファイルを持っていて、データフレーム 'DF'にロードされます。複数の領域、メモリ、VCPU、および各 '名前'に対応するストレージには異なる値があります。このデータフレームには1700行があります。 ...

0  さまざまな可能性がある場合のPython Pandas DataFrameでの文字列一致  ( String match in python pandas dataframe when there is different possibilities ) 
href="https://i.stack.imgur.com/yolw5.png" rel="nofollow noreferrer">イメージの入力ここにいる説明 私は4列のデータフレーム(300,000行)を持っています。次のサンプル値がある「モデル...

2  Pythonマルチスレッドはスピードを上げません  ( Python multithreading doesnt increase speed ) 
私は、場所の座標とその他のコードを含む2つの別々のファイルを持っています。 pandas を使用して、それらを一意のキーでマッピングすることで、3つのパラメータすべてを含む新しいデータフレームを作成します。問題は時間がかかりすぎることです。 これは、それ...

1  Pandas Groupbyをグループ行グループに使用するには、列値を合計して決定できますか?  ( Can you use pandas groupby to group rows determined by summing a column value ) 
データフレームの行を1列の値でグループ化したいと思います。以下に示す例は、iが150の値で 'NumberOfTrades'の値をグループ化していた場合であるので、上位2行がグループ化され、下位3行がグループ化されます。私が理解している次のステップは、各グルー...

-1  特定のデータを出すには、このAuterHTMLコードをどのようにループしますか? (私はこれを試してみたいようにWebScrapeの方法がわかりません)  ( How do i loop over this outerhtml code to get out certain data i dont know ho ) 
私は、2011年の人口国口の中に、インドの地区に地区コードに一致するリストを取得しようとしています。以下に、政府のウェブサイトからコピーしたAuterhtmlの小さなサブセットを投稿します。私はそれをループさせようとし、各小さなHTMLボックスから文字列とin...

0  Pandasを使って最寄りの分をマージします  ( Merge with the nearest minute using pandas ) 
私は単に±1分の間隔で2つのデータフレームをマージしたいです。 ここにサンプルデータセットを持つname_df: <事前> <コード> Name Date A 2/19/2019 17:16:15 B 2/19/2019 17:...




© 2022 cndgn.com All Rights Reserved. Q&Aハウス 全著作権所有