使用str.split
:
df
ID visits
0 1 12 1 40 50
1 2 56 2 567 34
2 3 4 5 345 78
visits = df['visits'].str.split(expand=True).add_prefix('visit_')
visits
visit_0 visit_1 visit_2 visit_3
0 12 1 40 50
1 56 2 567 34
2 4 5 345 78
次に、ID
でvisits
を連結:
df = pd.concat([df[['ID']], visits], 1)
df
ID visit_0 visit_1 visit_2 visit_3
0 1 12 1 40 50
1 2 56 2 567 34
2 3 4 5 345 78
あなたが個別に各番号の各桁をしたい場合は、あなたが希望チェーンdf.apply
コールを。さらに8
を0
に置き換える場合は、df.replace
を使用してください。
visits = df['visits'].str.replace('\s+', '')\
.apply(lambda x: pd.Series(list(x))).add_prefix('visit_')\
.replace('[89]', 0, regex=True)
visits
ID visit_0 visit_1 visit_2 visit_3 visit_4 visit_5 visit_6 visit_7
0 1 1 2 1 4 0 5 0 NaN
1 2 5 6 2 5 6 7 3 4
2 3 4 5 3 4 5 7 0 NaN
各列がストリングの列(object
タイプ)であることに注意してください。しかし、それらを整数として使用したい場合は、NaN
を取り除きたいでしょう。 NaN
の列を削除しても問題がなければ、このソリューションは少し簡素化します。
visits = df.visits.str.replace('\s+', '')\
.apply(lambda x: pd.Series(list(x)))\
.dropna(axis=1).add_prefix('visit_').astype(int) % 8
visits
visit_0 visit_1 visit_2 visit_3 visit_4 visit_5 visit_6
0 1 2 1 4 0 5 0
1 5 6 2 5 6 7 3
2 4 5 3 4 5 7 0
あなたはまだpd.concat
を使用してdf.ID
とvisits
を連結する必要があります。
まずは、桁数は常に同じであることを確認してください。そうでない場合は、他の操作(たとえば、その列に関数を適用するなど)が必要な場合があります。 – pazqo
@pazqoそれを見て、私はいいえと言います。それは大きなファイル(1000行)です。だから私はPythonを使いたいのです。 – Supern92
数字や_numbers_を分割したいですか?数字を分割することは意味がないようです。また、いくつかのデータをテキストに貼り付けてください。人気の信念に反して、絵は助けにならない。 –