Python超初心者です。
事業者名 | 路線名 | 駅名 |
---|---|---|
JR東日本 | 東海道本線 | 東京 |
JR東日本 | 東海道本線 | 丸ノ内線 |
JR東日本 | 東海道本線 | 東海道新幹線 |
JR東日本 | 東海道本線 | 有楽町 |
JR東日本 | 東海道本線 | 有楽町線 |
JR東日本 | 東海道本線 | 新橋 |
... | ... | ... |
以上のようなデータを扱っており、以下のように空白の行を挿入して駅ごとにデータを区切りたいと考えています(都合上、接続路線名も駅名と同じ列になってしまっています)。
事業者名 | 路線名 | 駅名 |
---|---|---|
JR東日本 | 東海道本線 | 東京 |
JR東日本 | 東海道本線 | 丸ノ内線 |
JR東日本 | 東海道本線 | 東海道新幹線 |
NaN | NaN | NaN |
JR東日本 | 東海道本線 | 有楽町 |
JR東日本 | 東海道本線 | 有楽町線 |
NaN | NaN | NaN |
JR東日本 | 東海道本線 | 新橋 |
... | ... | ... |
そこで、駅名が記載された行を特定するために「線」「鉄道」「電鉄」「モノレール」というワードを含まない行を検索、スライスしてその末尾に空白の行を追加するループを書いてみたのですが、うまくいきません。
for i in df['駅名']: x = ~df['駅名'].str.contains('線|鉄道|電鉄|モノレール') #駅名の行を特定 idx = df[x == 1] if x is True: #駅名の場合に条件分岐 y = idx.index[0] #最初の駅名のインデックス取得(最初の表で言うと、「東京」の行番号を取得) z = idx.index[1] #二番目の駅名のインデックス取得(最初の表で言うと、「有楽町」の行番号を取得) df1 = df.iloc[y:z-1] #スライス(最初の表で言うと、「東京」から「東海道新幹線」までをスライス) df1.append(pandas.Series()) #空白の行を追加
エラーメッセージなども出ないのですが、実行しても何も変化しません。
挿入したい行番号はわかっているので転置→insertも試しましたが、量が多すぎてエラーが出てしまいました。
初心者のため理解不足・調査不足な点も多いかと思いますが、お力添えいただけると嬉しいです。
以下追記
投稿の段階では記載していませんでしたが、このデータにはさらに
事業者名 | 路線名 | 駅名 | 下り線乗客数 |
---|---|---|---|
JR東日本 | 東海道本線 | 東京 | 16851469 |
JR東日本 | 東海道本線 | 丸ノ内線 | 0 |
JR東日本 | 東海道本線 | 東海道新幹線 | 3491353 |
JR東日本 | 東海道本線 | 有楽町 | 11113994 |
JR東日本 | 東海道本線 | 有楽町線 | 0 |
JR東日本 | 東海道本線 | 新橋 | 15125426 |
... | ... | ... | ... |
のような列がさらに9列ほどあり、乗降客数の合計(表内の東京駅であれば東京+丸ノ内線+東海道新幹線)を各駅ごとに出すのが私の本来の目的です。
そこで駅ごとに空白の行(その後0.1に置換)を挟み、
result = 0 for i in df['下り線乗客数']: result = result + i if i == 0.1: result = result - 0.1 print(result) result = result * 0 df1 = result print(df1)
という作業を行うことで各駅ごとの合計を求めようとしていたため、目印となる空白の行を挿入しようとしています(もっと効率的な方法があるとは思いますが、自分で考えられる方法がこれしかありませんでした)。

回答1件
あなたの回答
tips
プレビュー