🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Python

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

pandas

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

Q&A

解決済

2回答

5684閲覧

pandas 改行を取り除く

fox_cat

総合スコア8

Python

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

pandas

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

0グッド

0クリップ

投稿2019/12/07 19:28

pandasで改行をreplace関数を使って取り除いたのですが、時刻の部分のみうまく取り除くことが出来ませんでした。
どのようにすれば時刻の部分の改行を取り除くことが出来るのでしょうか?
おそらく時刻の部分がnameになっていることが問題だと思うのですが、index型にする方法が分かりませんでした。
df=df.replace('\n','',regex=True)
df=df.replace('\r','',regex=True)

#変更前 時刻 購入品   価格 \r\n0時 \r\nバナナ 400 \r\n3時 \r\nみかん 400 \r\n6時 \r\nマンゴー 300 \r\n9時 \r\nパン  700 \r\n12時 \r\nなし  1200 \r\n15時 \r\nレモン 1300 \r\n18時 \r\nリンゴ 1100 \r\n21時 \r\nパイ    900 #変更後 時刻 購入品   価格 \r\n0時 バナナ 400 \r\n3時 みかん 400 \r\n6時 マンゴー 300 \r\n9時 パン  700 \r\n12時 なし  1200 \r\n15時 レモン 1300 \r\n18時 リンゴ 1100 \r\n21時 パイ    900

Index(['購入品', '価格'], dtype='object', name='時刻')

また購入品と価格の列の部分を入れかえ方も教えていただきたいです

#理想結果 時刻 価格 購入品 0時  400 バナナ 3時  400 みかん 6時  300  マンゴー 9時  700   パン 12時  1200   なし  15時  1300  レモン  18時 1100  リンゴ 21時 900    パイ

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

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

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

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

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

guest

回答2

0

ベストアンサー

問題の解決は

Python

1df=df.replace('\r\n','') 2df.index = df.index.str.replace('\r\n','')

でよいかと思います。

おそらく時刻の部分がnameになっていることが問題だと思うのですが

"時刻" は Index行の名前なのではなく、Column行の名前になっているのではないでしょうか。質問を見る限りこれが混乱の原因なのかなと思います。

試しに

Python

1print(df.index.name) 2print(df.columns.name)

にてIndex列の名前とColumn行の名前を表示してみてください。(私の予測通りだとすると、**"時刻"**は後者で表示されます)

その場合、このままでも特に問題は引き起こさないとは思いますが、気持ちが悪いので

Python

1df.index = df.index.rename('時刻') 2df.columns = df.columns.rename(None)

のようにIndex列側に**"時刻"**お振って、Column行の名前は削除すると良いかと思います

投稿2019/12/09 00:11

magichan

総合スコア15898

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

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

fox_cat

2019/12/12 04:35

回答ありがとうございます。 magichanの予想通りprint(df.columns.name)で出てきました。 しかしながら、df.index = df.index.rename('時刻')df.columns = df.columns.rename(None) こちらのプログラムを実行したところ時刻がindexに入りませんでした。 2つ目のプログラムで時刻自体を消すことが出来たのですが、消した後1行目に時刻のindexを追加することは出来るのでしょうか?
magichan

2019/12/13 00:07

ん?少し整理をしましょうか。 現状で既にindex列に時刻データが入っているという前提で話をしておりますが違うのでしょうか。 試しに print(df.index) としてみて index列に何が設定されているかを確認ください。 index行に間違いなく時刻データが入っているのであれば特に問題はないはずですが、 index行にもColumn名の様に名前をつけたいのであれば、更に df.index = df.index.rename('時刻') の様な処理を行うことで名前を付けることができます。 (df.index.rename() はあくまでも index列のデータに名前を付けるだけの処理です。) ちなみに質問の例では Column行(ヘッダ行)にも何故か'時刻'行という名前が何故か振られていたということになります。 (つまり'時刻'という表示は列の名前ではなくColumn行(ヘッダ行)の名前として表示されていたということになります) これは明らかに間違いなので df.columns = df.columns.rename(None) を使ってColumn行(ヘッダ行)の名前を削除する を行うとどうでしょうかということです。
guest

0

インデックス'時刻'をいったんカラムに変更し、\r\nを除去後、時刻をインデックスに戻す。

python

1df=df.reset_index() 2df=df.replace('\r\n','',regex=True) 3df=df.set_index('時刻') 4df

投稿2019/12/08 01:35

WathMorks

総合スコア1582

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

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

fox_cat

2019/12/08 09:05

df=df.set_index('時刻')の部分でKeyError: '時刻'が出てきてしまいます ひとつ前の処理で確認すると Index(['index','購入品', '価格'], dtype='object', name='時刻')となっており、時刻にあたる部分がindexになっているみたいです
WathMorks

2019/12/08 09:21

df.indexが時刻 df.columns が 購入品 価格 と解釈して回答しました。 購入品 価格 時刻 \r\n0時 \r\nバナナ 400 \r\n3時 \r\nみかん 400
fox_cat

2019/12/08 18:27

現状としてindexが購入品', '価格、nameに時刻と入っている状態になっています Index(['購入品', '価格'], dtype='object', name='時刻')
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問