WatsonStudioのNotebookでプロジェクトのデータ資産としてアップロード済みのExcelファイルまたはCSVファイルを pandasのDataFrameに読み込む

WatsonStudioのNotebookでプロジェクトのデータ資産としてアップロード済みのExcelファイルまたはCSVファイルを pandasのDataFrameに読み込むのは、WatsonStudioのNotebookがコードを生成してくれるので非常に簡単にできます。

参考（製品ドキュメント）:
https://dataplatform.cloud.ibm.com/docs/content/wsj/analyze-data/data-load-support.html?context=cpdaas&audience=wdp&locale=en

# 0. (前準備)Notebookを開いた状態ででプロジェクトのデータ資産としてファイルをアップロード
既にアップロード済みの場合はここは飛ばしてください。
まだファイルをプロジェクトのデータ資産としてアップロードしていない場合は、以下の方法でアップロードできます。

## 0-1. notebookを編集状態で開き、右上の01/00のアイコン「データの検索と追加」をクリックします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/e726afcf-799e-088a-2ef7-bc17c383405d.png)

データの画面が右側に開きます。

## 0-2. 「ここにファイルをドラッグ・アンド・ドロップするか、アップロードしてください。」と書かれた四角のエリアにアップロードしたいファイルをドラッグ・アンド・ドロップするか、そのエリアをクリックしてファイルダイアログからファイルを選択してアップロードを実行します。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/d5e8de5c-8c0d-18a6-841a-48e6ac874110.png" width="300">



アップロードが完了すると 「ここにファイルをドラッグ・アンド・ドロップするか、アップロードしてください。」の四角の下に、ファイル名と「コードに挿入」のメニューが表示されます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/5c024ac8-2be2-9228-6b8a-22e63a20415e.png" width="300">



# 1. NotebookにpandasのDataFrameに読み込むためのセルを準備

ここでは新たにセルを追加してそこにカーソルを置いて、コードを入れるようにします。
既存のセルでも問題ありませんが、その場合カーソルのある部分からpandasのDataFrameに読み込むコードが生成されます。

上のメニューアイコンからプラスのアイコンをクリックしてセルを追加します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/3ab84cf2-1770-c368-3f5c-defd05fa26a0.png)

# 2. 追加したセルをクリック
　
追加したセルをクリックしてカーソルをセルにおきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/dfebccdc-da58-42c5-720c-db66266168d3.png)


# 3. 右側のデータのエリアからpandasのDataFrameに読み込みたいファイルの下にある、「コードに挿入」のメニューをクリック。表示されたドロップダウンメニューから「pandas DataFrame」をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/3ff31191-b1e5-d47c-e7af-899a62d7cc18.png)

セルにpandasのDataFrameであるdf_data_**X** (Xは数字)に指定したファイルを読み込むコードが挿入されます。df_data_の後の`X`の数字は1だったり、0だったりします。

どこにも書いてはないですが、CSVは1でExcelは0のような気がしています(あくまでも個人の考えです)。

下のイメージでは、df_data_**X**は`df_data_1`となっています。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/3edc7f22-0914-a499-6836-4bcb2af73ac3.png)

# 4. セルの実行
セルを実行してdf_data_**X** (Xは数字)にデータを読み込ませます。
最後にdf_data_**X**.head()のコードが入っているので、読み込んだ最初の5行が表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/a3d6f592-66c3-c5f5-93f4-b75967c993ae.png)

最初の1行目はデフォルトでヘッダー項目行とみなされます。

もし最初の1行目はヘッダー項目行ではなくデータ行の場合は、
`df_data_1 = pd.read_csv(body)`
の行を[pandas.read_csv](https://pandas.pydata.org/docs/reference/api/pandas.read_csv.html)のオプションを付けて変更します。`header=None`を引数に付けます。
デフォルトで数字の列名がつきます。
```python
df_data_1 = pd.read_csv(body, header=None)
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/1bb7f05e-e981-e80f-b32e-56a5e84885f2.png)

数字の列名ではなく、列名を指定したい場合は
`names=['<列名1>', '<列名2>']`
のようにnamesを引数に加えます。
```python
df_data_1 = pd.read_csv(body, header=None, names=['item', 'number'])
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/294516/e0377485-21fc-914c-072f-7c3a0afffe20.png)

Excel(read_excel)の場合も同様のオプションです。

これでpandasのDataFrameにデータが入りました!

次に別のファイルを読み込む場合、同じ種類のファイルの場合は同じdf_data_**X** (Xは数字)という変数名が使用され、上書きされてしまうので、データを取っておきたい場合はコピーしておきます。

```py
df_my_data1 = df_data_1.copy()
```

ちなみにCSV, ExcelファイルだけでなくJSONなど他のファイルタイプも同じ感じで読み込めますので、他のファイルタイプも読み込みたい場合は[ドキュメント](https://dataplatform.cloud.ibm.com/docs/content/wsj/analyze-data/data-load-support.html?context=cpdaas&audience=wdp&locale=en)を参考にしてみてください。

以上です。