質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

3回答

559閲覧

Python:データフレームに読み込んだxlsx名(CSV名)を列に表記したい

Yeeeee

総合スコア18

Jupyter

Jupyter (旧IPython notebook)は、Notebook形式でドキュメント作成し、プログラムの記述・実行、その実行結果を記録するツールです。メモの作成や保存、共有、確認などもブラウザ上で行うことができます。

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2020/05/21 08:20

編集2020/05/21 09:01

Python Jupyter Notebookにてデータクリーニングを行っております。

複数のxlsxを読み込みデータフレームを作成したいです。
読み込んだxlsx名をデータフレームに記述したいのですが、煮詰まっています。

例えば、とあるフォルダに格納されている

  • data01.xlsx
  • data2.xlsx
  • data10.xlsx
  • data17.xlsx

を読み込み一つのデータフレーム(例:df)にしたい

python

1datafiles = glob.glob("data/sample/*.xlsx") 2df = [pd.read_excel(datafiles[i], parse_dates=[0]) for i in range(len(datafiles))] 3 4# 結合 5df_main= pd.concat(df, ignore_index=True) 6 7#ファイル名取得 8import os 9file_name = os.path.basename(datafiles[1]) 10file_name 11#OUT:data01.xlsx 12

で結合はできました。
データとして、書くエクセルの行に空白があるため、結合するとNaNが含まれます。

IDnamearea・・・
10佐藤東京都
NaNNaNNaN
21田中千葉県
34高山栃木県
55斎藤東京都
NaNNaNNaN
NaNNaNNaN
100山田神奈川県
120山田神奈川県
NaNNaNNaN
181山田神奈川県



<<求めるdf>>
|ID|xlsx|name|area|・・・
|:--|:--:|--:|--:|
|10|data01.xlsx|佐藤|東京都|
|21|data01.xlsx|田中|千葉県|
|34|data02.xlsx|高山|栃木県|
|55|data02.xlsx|斎藤|東京都|
|100|data02.xlsx|山田|神奈川県|
|120|data10.xlsx|山田|神奈川県|
|181|data17.xlsx|山田|神奈川県|



エクセル数は固定ではありません。列・行ともに各エクセルで異なります。
アドバイスいただけたら幸いです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

python3

1import pandas as pd 2import glob 3import os 4 5df = pd.DataFrame() 6df_add = pd.DataFrame() 7 8for datafiles in glob.glob("/temp/*.xlsx"): 9 file_name = os.path.split(datafiles)[1] 10 df = pd.read_excel(datafiles, parse_dates=[0]) 11 df= df.dropna(how='all') 12 df = df.assign(xlsx=file_name) 13 df_add = df_add.append(df) 14 15print(df_add)

下記結果になります。

index ID name area xlsx
0 10.0 佐藤 東京都 aaa.xlsx
2 21.0 田中 千葉県 aaa.xlsx
3 34.0 高山 栃木県 aaa.xlsx
4 55.0 斎藤 東京都 aaa.xlsx
0 100.0 山田 神奈川県 bbb.xlsx
1 120.0 山田 神奈川県 bbb.xlsx
3 181.0 山田 神奈川県 bbb.xlsx

ご検討ください。

投稿2020/05/22 00:43

編集2020/05/22 00:46
zenji0705

総合スコア69

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yeeeee

2020/05/27 16:04

ありがとうございます。 できました。
guest

0

1ファイル毎にassignしてファイル名追加するだけではないですか?

追記 dfはエクセルから取り込んだものに読み替えて

import pandas as pd df1 = pd.DataFrame({'name':['togashi', 'please', 'work'] ,'fan':[10, 20, 30]} ) df2 = pd.DataFrame({'name':['kida', 'please', 'work'] ,'fan':[60, 70, 40]} ) df1 = df1.assign(xlsx='ekusel1') df2 = df2.assign(xlsx='ekusel2') print(df1) print(df2) print(pd.concat([df1, df2]).reset_index(drop=True))

投稿2020/05/21 14:15

編集2020/05/21 15:57
hentaiman

総合スコア6426

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yeeeee

2020/05/21 14:29

例えば、df.assign(xlsx='エクセル名')という感じででしょうか? 今、考えているのは 1.エクセル名を取得したリストを作成→ datafiles 2.data01.xlsxを読み込み 3.xlsxカラムを追加し 4.xlsxカラムにdata01.xlsxを追記 5. 何かしらのデータフレームとして保管  2~5をリストのdatafiles分、forで回す 6. 保管されたデータフレームを結合 なのですが、どういうコードで書けば煮詰まっています。
hentaiman

2020/05/21 14:34

dropnaした後にassignしてconcatするだけだと思うけど
Yeeeee

2020/05/21 15:11

assign、concatを使うと、 具体的にどんなコードになるのでしょうか? data01.xlsxをdf01に読み込み、 df02.insert( 1, 'xlsx', datafiles[1]) みたいな感じでカラム作成、代入できるのですが、結合された後の代入方法がわかりません。
hentaiman

2020/05/21 15:30

なのでconcatの前にassignをするんですよ 列追加した後にconcatするのでは要件を満たせないんですか?
Yeeeee

2020/05/21 15:44

ごめんなさい。 それがわからないので質問させてもらっているのです。 よろしくお願いします。
hentaiman

2020/05/21 15:58

元のコードでconcat使ってることと別の回答でdropnaは分かると言われている事からassignの使い方が分からないと判断して回答追記しました
guest

0

python

1df_main= df_main.dropna(how='all')

投稿2020/05/21 13:35

NCC1701

総合スコア1680

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Yeeeee

2020/05/21 14:10

すいません。 dropnaはわかるのですが、求めるdfのxlsx部分追加をpythonでどう記述すべきなのか・・・ と。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問