2017-03-08 9 views
1

私のpandasデータフレームには、ファイルパスを持つ文字列である列 "file"が含まれています。私はdfply:突然変異する文字列:TypeError

resultstatsDF.reset_index() >> mutate(dirfile = os.path.join(os.path.basename(os.path.dirname(X.file)),os.path.basename(X.file))) 

のように、このコラムを変異させるdfply使用しようとしていますが、私は私が間違って何をしました

TypeError: __index__ returned non-int (type Call) 

エラーが出ますか?私はそれをどうやって行うのですか?

答えて

0

私の質問が投票されたので、一部の人にとってはまだ興味深いと思います。これまでのところPythonでかなりのことを学んだことがあれば、私はそれに答えることができます。多分、それは他のユーザに役立つでしょう。

まず、私たちは私たちはまだエラーを取得していることがわかり

     file 
0 /home/user/this/file1.png 
1 /home/user/that/file2.png 

あるDATAFRAME

resultstatsDF = pd.DataFrame({'file': ['/home/user/this/file1.png', '/home/user/that/file2.png']}) 

を(必要なパッケージに

import pandas as pd 
from dfply import * 
from os.path import basename, dirname, join 

をインポートし、必要なパンダを作ってみようdfplyの継続的な発展のために変更されましたが):

resultstatsDF.reset_index() >> \ 
mutate(dirfile = join(basename(dirname(X.file)), basename(X.file))) 

TypeError: index returned non-int (type Intention)

のmutateはシリーズ上で動作しますが、私たちは要素に取り組ん機能を必要とするためで、あります。ここでは、一連のpandasの関数pandas.Series.applyを使用できます。 しかし、シリーズの各要素に適用できるカスタム関数も必要ですfile。 すべては私たちがdfplyのmutateせずにこれを行う

index      file   dirfile 
0  0 /home/user/this/file1.png this/file1.png 
1  1 /home/user/that/file2.png that/file2.png 

出力コード

def extract_last_dir_plus_filename(series_element): 
    return join(basename(dirname(series_element)), basename(series_element)) 

resultstatsDF.reset_index() >> \ 
mutate(dirfile = X.file.apply(extract_last_dir_plus_filename)) 

で終わる一緒に入れ、我々は、代わりに

resultstatsDF['dirfile'] = resultstatsDF.file.apply(extract_last_dir_plus_filename) 
を書くことができ
関連する問題