やりたいこと
AA11BB
11AB22
DD11ZZ
このデータから数字とアルファベットの間に区切りを入れて、
<1列目> <2列目> <3列目> <4列目>
AA11BB AA_11_BB AA11_BB AA_11BB
11AB22 11_AB_22 11AB_22 11_AB22
DD11ZZ DD_11
のように、区切りを入れた上で列は不揃いの複数の組合せをdfで取得し出力したいと考えています。
文字列については複数の組み合わせを作成することが出来、これをリストもしくはdfで複数行で操作したいのですが、リスト内の各文字列に対応してリスト(df)の数(列)を増やす実装方法に困っています。
コード
# 文字列のリストを定義 a = 'AA11BB' # 空白を入れる b = re.sub(r'((?<=\d)\D|(?<=\D)\d)', r' \1', a) # スペース区切り lst = b.split(' ') # アンダースコア追加 ret = [] for tpl in itertools.product(['','_'],repeat=len(lst)-1): p = lst[0] for t,l in zip(tpl,lst[1:]): p += t + l ret.append(p) # 重複がある場合削除 ret = list(set(ret)) # dfに追加 df = pd.DataFrame(ret).T # csv出力(df) df.to_csv('df.csv', encoding='utf_8_sig')
現状は、上記'AA11BB'のみについて対応できています。
# 複数行対応したい a = pd.read_csv('test.csv') a = a.values.tolist() print(a) # [['AA11BB'],['11AB22'],['DD11']]
a = [['AA11BB'],['11AB22'],['DD11']]のようにリストのリストを使って1行ずつ文字列に対応させ
たいのですが、ここからがうまくいかず現状1行しか対応できない状況です。
複数行対応させるためのよい方法等がございましたらご教示頂けたらと思っております。
また、今回のような処理の場合、listでcsv出力まで処理するのが一般的なのか、dfで処理するのが一般的なのかもお教え頂けますと幸いです。
何卒よろしくお願い申し上げます。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/14 04:24
2019/05/14 05:57