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

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

詳細はこちら
Python

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

Q&A

解決済

2回答

1194閲覧

python 配列から拡張子を取得したい

aaraki

総合スコア15

Python

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

0グッド

0クリップ

投稿2019/09/11 01:35

"from" →pd.readcsvの時に、namesで名前を与えた  
0 NaN
1 DOC20190826001.pdf
2 DOC20190826001.pdf
3 131.jpg
4 132.jpg
5 133.jpg
6 134.jpg

と配列があり、拡張子を取得したいのですが。
os.path.splitext(data["from"])
とすると、expected str, bytes or os.PathLike object, not Seriesのエラーが出ます。

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

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

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

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

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

coco_bauer

2019/09/11 01:49

data["from"] の値を確認しましょう。 「expected str, bytes or os.PathLike object, not Series」[直訳]文字列、バイト列か、os.PathLike objectが入るはず、Seriesじゃなくて)というエラーですから。 単純に質問に書かれている配列の各要素をos.path.splitextでファイル名と拡張子に分けたら良さそうに思いますが、data["from"]との関係が判りません。
aaraki

2019/09/11 02:00

型は、 Name: from, dtype: object <class 'pandas.core.series.Series'> です。 dataは上記のシリーズが入っている(pd.read_csvで読み込ませてnamesで"from"と名前を付けた) つまり、dataシリーズのfrom列のようなものです。
meg_

2019/09/11 02:04

試したコードを載せてください。
aaraki

2019/09/11 02:14

if(os.path.splitext(data["from"])=='pdf'):
guest

回答2

0

ベストアンサー

最終的にどのような結果を得たいのかいまひとつ分かりませんが、

  • 方法1:Series.apply() にて os.path.splitext() を適用
  • 方法2:Series.str.rsplit('.') にて拡張子を分離

あたりでよいのではないでしょうか

Python

1import pandas as pd 2import numpy as np 3import os 4 5data = pd.DataFrame({'from': [np.nan, 'DOC20190826001.pdf', 'DOC20190826001.pdf', '131.jpg', '132.jpg', '133.jpg', '134.jpg']}) 6 7# 方法1:``Series.apply()`` にて ``os.path.splitext()`` を適用 8ext = data["from"].dropna().apply(lambda d: os.path.splitext(d)[1]) 9#1 .pdf 10#2 .pdf 11#3 .jpg 12#4 .jpg 13#5 .jpg 14#6 .jpg 15#Name: from, dtype: object 16 17# 方法2:``Series.str.rsplit('.')`` にて拡張子を抽出 18ext = data['from'].str.rsplit('.', n=1).str.get(1) 19#0 NaN 20#1 pdf 21#2 pdf 22#3 jpg 23#4 jpg 24#5 jpg 25#6 jpg 26#Name: from, dtype: object

投稿2019/09/11 03:07

magichan

総合スコア15898

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

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

aaraki

2019/09/11 06:07

値がとれました。ありがとうございました。
guest

0

それそのまま「python 拡張子取得」でぐぐるとでてきますねー
って、NaNを突っ込めばエラーが出るでしょうから、それを避けるようにしましょー

投稿2019/09/11 01:44

編集2019/09/11 01:48
y_waiwai

総合スコア88040

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

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

aaraki

2019/09/11 01:48

データになっている場合は、一旦、ファイルに吐き出してpathを指定しなければならないのでしょうか?
y_waiwai

2019/09/11 01:50

文字列を与えないと、配列のままじゃエラーになりますぜ(やっと意図を理解した)
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問