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

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

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

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

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

pandas

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

Q&A

解決済

2回答

1989閲覧

pandasの読み込みに失敗する理由がさっぱりわからない

KojiDoi

総合スコア13671

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python

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

pandas

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

0グッド

1クリップ

投稿2019/03/22 18:23

編集2019/03/25 17:27

https://teratail.com/questions/180478
の続きです。試行錯誤の結果、伺いたいことが変わってきたため、質問を立て直すことにしました。

現在直面している問題

ubuntuで、 pandasをimportしているpythonスクリプトがエラーを吐いて動いてくれません。
その原因と対処方法が皆目見当がつかないため、お知恵を拝借したいと考えています。

python

1# dftest1.py 2import pandas as pd 3 4df1 = pd.DataFrame({"date":( 5"2012-01-01 00:00:00", 6"2012-01-01 00:00:00", 7"2012-01-02 00:00:00", 8"2014-04-18 00:00:00")}) 9 10print(df1)

これをコマンドラインで実行しようとすると以下のようになってしまいます。python2.7と3.4が入っているのですが、どちらでもエラーとなってしまいます。

$ python3.4 ~/work/dftest1.py [ ~/raid/kiwa/analysis3 ] Traceback (most recent call last): File "/home/kdoi2/work/dftest1.py", line 2, in <module> import pandas as pd File "/usr/lib/python3/dist-packages/pandas/__init__.py", line 7, in <module> from pandas import hashtable, tslib, lib File "pandas/src/numpy.pxd", line 157, in init pandas.hashtable (pandas/hashtable.c:38262) File "/usr/lib/python3/dist-packages/numpy/__init__.py", line 153, in <module> from . import add_newdocs File "/usr/lib/python3/dist-packages/numpy/add_newdocs.py", line 13, in <module> from numpy.lib import add_newdoc File "/usr/lib/python3/dist-packages/numpy/lib/__init__.py", line 8, in <module> from .type_check import * File "/usr/lib/python3/dist-packages/numpy/lib/type_check.py", line 11, in <module> import numpy.core.numeric as _nx File "/usr/lib/python3/dist-packages/numpy/core/__init__.py", line 6, in <module> from . import multiarray SystemError: initialization of multiarray raised unreported exception $ python2.7 ~/work/dftest1.py [ ~/raid/kiwa/analysis3 ] PyCapsule_Import could not import module "datetime" Traceback (most recent call last): File "/home/kdoi2/work/dftest1.py", line 2, in <module> import pandas as pd File "/usr/lib/python2.7/dist-packages/pandas/__init__.py", line 6, in <module> from . import hashtable, tslib, lib File "numpy.pxd", line 157, in init pandas.hashtable (pandas/hashtable.c:21706) File "/usr/lib/python2.7/dist-packages/numpy/__init__.py", line 153, in <module> from . import add_newdocs File "/usr/lib/python2.7/dist-packages/numpy/add_newdocs.py", line 13, in <module> from numpy.lib import add_newdoc File "/usr/lib/python2.7/dist-packages/numpy/lib/__init__.py", line 8, in <module> from .type_check import * File "/usr/lib/python2.7/dist-packages/numpy/lib/type_check.py", line 11, in <module> import numpy.core.numeric as _nx File "/usr/lib/python2.7/dist-packages/numpy/core/__init__.py", line 6, in <module> from . import multiarray ImportError: PyCapsule_Import could not import module "datetime"

試したこと

実のところ以前は問題なくpandasが使えていました。今週、別のスクリプトを試そうとして動かなかったため原因を究明しようとしてこの事態に気づきました。

不思議なことにipythonから%runで呼び出すとちゃんと実行されます。更に、先の質問の後で試行錯誤したところ、次のようにすれば問題なく実行されることを確認しました。

$ python2.7 < ~/work/dftest1.py [ ~/raid/kiwa/analysis3 ] date 0 2012-01-01 00:00:00 1 2012-01-01 00:00:00 2 2012-01-02 00:00:00 3 2014-04-18 00:00:00

先の質問では、共有ライブラリの読み込み失敗の可能性を示唆していただきましたが、なぜ失敗するのか。ライブラリのインストールに失敗している、あるいは関連ファイルを誤って消去したり破壊したりと言ったことは考えられません。それでは上記のうまく行く状況が説明がつかないですから。

https://teratail.com/questions/180478
にも書いた通り、ライブラリの再インストールもやってみましたが事態は変化しません。既にライブラリはインストールされてるよというメッセージが返ってくるばかりです。

補足情報(FW/ツールのバージョンなど)

環境:

$ uname -a Linux kdoi 3.13.0-163-generic #213-Ubuntu SMP Thu Nov 15 02:19:07 UTC 2018 x86_64

ライブラリの確認:

#apt install python3-pandas Reading package lists... Done Building dependency tree Reading state information... Done python3-pandas is already the newest version. (中略) Use 'apt-get autoremove' to remove them. 0 upgraded, 0 newly installed, 0 to remove and 173 not upgraded.

まとめ

あらためて質問項目を列挙しておきます。
0. pythonスクリプト実行時にpandasの関連ライブラリ読み込みに失敗する理由として何が考えられるか。
0. python script.pypython < script.pyで挙動が異なるのはなぜか。
0. 事態を解決し、つつがなくpython script.pyできるようにするには何をすればよいか。

解決

まず質問文に不正確な記述があったことをお詫びせねばなりません。実際に行った確認作業は次のようなものでした。

cd ~ python2.7 ~/work/dftest1.py ... python2.7 < ~/work/dftest1.py

問題の直接の原因は~/workにdatetime.pycというファイルが存在していたことにありました。当該ディレクトリは実験や勉強のために試作スクリプトを色々作り置いている場所で、自分でも覚えていませんがおそらくpythonを勉強し始めた初期のころに間違えて作ってしまったのだと思われます。datetime.pyというファイルが悪さをしている可能性は疑っていたのですが、.pycは盲点でした。
そして、モジュールのサーチパスに関して私は認識不足でした。
スクリプト名を引数として直接指定した場合は、そのスクリプトが存在するディレクトリがサーチパスの先頭に追加される。しかし、標準入力からリダイレクトで流し込んだ時は、スクリプトファイル名をpython自体は与り知らないので、その場所がサーチパスに追加されることはない。これが「挙動が異なった」原因でした。
~/work/datetime.pycを消去したところ、あっさり実行に成功です。わかってみれば下らない理由でした……。

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

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

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

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

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

guest

回答2

0

ベストアンサー

直接の答えではありませんが、検索してこのあたり ↓ のページを見ると、カレントディレクトリに datetime.py といった、既存のモジュール/パッケージと重複する名前の .py ファイルがある場合に発生しうる、といったことが言われています。

インストールは間違いなく成功しているとのことであれば、 import sys; print(sys.path) といった行をスクリプト内に挿入して sys.path の中身を確認されてみてはいかがでしょうか(特に 2 の問題はこのあたりが絡んでいるような気がします)。

追記: hayataka2049 さんとポイントがかぶったので hayataka2049 さんのご回答をご覧ください。

投稿2019/03/23 01:09

編集2019/03/23 01:11
gh640

総合スコア1407

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

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

0

ImportError: PyCapsule_Import could not import module "datetime"

でググってみました。

間違ってubuntu14.04を16.04にupgradeしてしまった場合の対応 - Qiita

OSの更新とかはやっていませんかね・・・

from . import multiarray
ImportError: PyCapsule_Import could not import module "datetime"

字義的に考えると、拡張モジュールの中でdatetimeをimportしようとしてこけているのだと思いますが、標準モジュール全般が拡張モジュールの中から見えないか、見えててimportに失敗している感じでしょうか。

とりあえず、引数に渡したときとリダイレクトで流し込んだときでsys.pathが違わないか見てみるとかはどうでしょうか。もし違っていたら収穫です。

https://docs.python.org/ja/3/c-api/import.html#c.PyImport_ImportModule

投稿2019/03/23 00:59

編集2019/03/23 01:05
hayataka2049

総合スコア30933

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問