web-dev-qa-db-ja.com

Pandasカンマで列を複数の列に分割する

コンマ/スペースの分離に基づいて、列を複数の列に分割しようとしています。

私のデータフレームは現在のように見えます

     KEYS                                                  1
0   FIT-4270                                          4000.0439
1   FIT-4269                                          4000.0420, 4000.0471
2   FIT-4268                                          4000.0419
3   FIT-4266                                          4000.0499
4   FIT-4265                                          4000.0490, 4000.0499, 4000.0500, 4000.0504,

をお願いします

   KEYS                                                  1           2            3        4 
0   FIT-4270                                          4000.0439
1   FIT-4269                                          4000.0420  4000.0471
2   FIT-4268                                          4000.0419
3   FIT-4266                                          4000.0499
4   FIT-4265                                          4000.0490  4000.0499  4000.0500  4000.0504 

私のコードは現在KEYS列を削除していますが、その理由はわかりません。誰かが問題を改善したり修正したりできますか?

v = dfcleancsv[1]

#splits the columns by spaces into new columns but removes KEYS?

dfcleancsv = dfcleancsv[1].str.split(' ').apply(Series, 1)
12
Anekdotin

他の誰かが単一の列(値で区切られている)を複数の列に分割したい場合-これを試してください:

series.str.split(',', expand=True)

これは私が探しているここに来た質問に答えました。

EdChum's データフレームに分割された列を追加するコードを含むコード。

pd.concat([df[[0]], df[1].str.split(', ', expand=True)], axis=1)

ドキュメントの分割

concatドキュメンテーション

16
Anthony R

Edchumsの回答を使用

pd.concat([df[[0]], df[1].str.split(', ', expand=True)], axis=1)

変数を代入することで解決できました。

dfcleancsv = pd.concat([dfcleancsv['KEYS'], dfcleancsv[1].str.split(', ', expand=True)], axis=1)
4
Anekdotin

OPには、可変数の出力列がありました。出力列の数が固定されている特定の場合、結果の列に名前を付ける別のエレガントなソリューションは、複数の割り当てを使用することです

サンプルデータセットをロードし、organ_dimensionと呼ばれる変数を取得するために長い形式に変更します。

import seaborn
iris = seaborn.load_dataset('iris')
df = iris.melt(id_vars='species', var_name='organ_dimension', value_name='value')

organ_dimensionセパレーターに基づいて、_変数を2つの変数organおよびdimensionに分割します。 this answer "列を2列に分割する方法は?"

df['organ'], df['dimension'] = df['organ_dimension'].str.split('_', 1).str
df.head()

Out[10]: 
  species organ_dimension  value  organ dimension
0  setosa    sepal_length    5.1  sepal    length
1  setosa    sepal_length    4.9  sepal    length
2  setosa    sepal_length    4.7  sepal    length
3  setosa    sepal_length    4.6  sepal    length
4  setosa    sepal_length    5.0  sepal    length
1
Paul Rougieux

多分これはうまくいくはずです:

df = pd.concat([df['KEYS'],df[1].apply(pd.Series)],axis=1)
0
Siraj S.