データセットに格納されたある列のデータを抜き出す作業で、ひとつずつではなく複数の塊にまとめることとなり、 しかもセミコロン ";" で連結したいというリクエストに対応しましたので、Blogにまとめました。

コードはかなりベーシックな内容ですが、データフレーム操作の基本から応用までの良いサンプルだと思います。

変換イメージ

データフレームの変換イメージを以下のとおり図示します。

countplot

サンプルコード

サンプルコードを以下に示します。データフレームの対象列を一旦リスト化して、N個ずつの塊に分割し、それを再びデータフレームに結合します。 その結果をCSVファイルに書き出し、それを再びデータフレームで読み込むなど、中間ファイルの一連の処理が行われます。もっと効率的に 実行できる方法も考えられますが、ここで使用されているテクニックは別の場面でも有用である可能性がありますので、参考にしてください。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
# 必要なモジュールをインポートする
import numpy as np
import pandas as pd
import codecs

# アウトプットファイル 'output.csv'を初期化する
with open("output.csv", "w") as f:
    pass

# 対象となる列をリスト化する
np_array = df['random_words'].values
np_list = np_array.tolist()

# リスト化した対象列を 3(N=3)分割する 任意可能 
N = 3 
splited_df = [np_list[i:i+N] for i in range(0, len(df), N)]
# 操作しやすいようにデータフレームにしておく
df = pd.DataFrame(splited_df)

# データフレーム転置(4x3->3x4)してオリジナルデータを縦向きに書き出すようにする
df = df.T

# 転置した結果、4列になるのでそれぞれにカラム名をつける
collist = ['col1', 'col2', 'col3', 'col4']
df.columns = collist

# col1 to 4 のそれぞれのデータを";"で連結してPrint to file('output.csv') で書き出す
for i in collist:
    k = ";".join(df[i])
    print(k, "," , file=codecs.open('output.csv', 'a', 'utf-8'))

# 書き出された'output.csv'をデータフレーム(df)で読み込む
import codecs
with codecs.open("output.csv", mode ="r", encoding ="utf-8", errors="ignore") as file:
    df = pd.read_csv(file, delimiter =",", header=None)

# 余分な2番目のカラムを削除する
df = df.drop(columns=[1])

# カラム名'";" で連結したrandom_words'としてnotebook上に書き出し
df.columns = ['";" で連結したrandom_words']
display(df)

最終結果のデータフレーム

countplot


参照ページ一覧

このブログを作成するにあたり、以下のページを参考にしています。併せてご覧ください。

1) 複数の行を連結して重複行を削除する
2) カテゴリカル変数の要約
3) カラムデータの特定語句の有無を判定しカテゴリ化する
4) データクリーニングの備忘録(Updated)