2つの列を分割しようとしていますが、データにnull値があることがわかります。このデータフレームを想像:パンダラムダ関数のヌル値を適用する
df = pd.DataFrame(['fruit: apple','vegetable: asparagus',None, 'fruit: pear'], columns = ['text'])
df
text
0 fruit: apple
1 vegetable: asparagus
2 None
3 fruit: pear
私はそうのような複数の列にこれを分割したい:私は代わりに、次のDFを持っている場合は、しかし、
df['cat'] = df['text'].apply(lambda x: 'unknown' if x == None else x.split(': ')[0])
df['value'] = df['text'].apply(lambda x: 'unknown' if x == None else x.split(': ')[1])
print df
text cat value
0 fruit: apple fruit apple
1 vegetable: asparagus vegetable asparagus
2 None unknown unknown
3 fruit: pear fruit pear
:
df = pd.DataFrame(['fruit: apple','vegetable: asparagus',np.nan, 'fruit: pear'], columns = ['text'])
分割結果を次のエラー:
df['cat'] = df['text'].apply(lambda x: 'unknown' if x == np.nan else x.split(': ')[0])
---------------------------------------------------------------------------
AttributeError Traceback (most recent call last)
<ipython-input-159-8e5bca809635> in <module>()
1 df = pd.DataFrame(['fruit: apple','vegetable: asparagus',np.nan, 'fruit: pear'], columns = ['text'])
2 #df.columns = ['col_name']
----> 3 df['cat'] = df['text'].apply(lambda x: 'unknown' if x == np.nan else x.split(': ')[0])
4 df['value'] = df['text'].apply(lambda x: 'unknown' if x == np.nan else x.split(': ')[1])
C:\Python27\lib\site-packages\pandas\core\series.pyc in apply(self, func, convert_dtype, args, **kwds)
2158 values = lib.map_infer(values, lib.Timestamp)
2159
-> 2160 mapped = lib.map_infer(values, f, convert=convert_dtype)
2161 if len(mapped) and isinstance(mapped[0], Series):
2162 from pandas.core.frame import DataFrame
pandas\src\inference.pyx in pandas.lib.map_infer (pandas\lib.c:62187)()
<ipython-input-159-8e5bca809635> in <lambda>(x)
1 df = pd.DataFrame(['fruit: apple','vegetable: asparagus',np.nan, 'fruit: pear'], columns = ['text'])
2 #df.columns = ['col_name']
----> 3 df['cat'] = df['text'].apply(lambda x: 'unknown' if x == np.nan else x.split(': ')[0])
4 df['value'] = df['text'].apply(lambda x: 'unknown' if x == np.nan else x.split(': ')[1])
AttributeError: 'float' object has no attribute 'split'
NaN値で同じ分割を行うにはどうすればよいですか? 通常、ヌル値を無視する分割関数を適用する方が良い方法はありますか?
私は次のように持っていた代わりにあれば、これは文字列の例ではありませんでした想像:私はSeries.applyように感じる
df = pd.DataFrame([2,4,6,8,10,np.nan,12], columns = ['numerics'])
df['numerics'].apply(lambda x: np.nan if pd.isnull(x) else x/2.0)
はほとんどそれがヌル行をスキップするように指示する引数とちょうど出力としてそれらを取る必要がありますnulls。私はより良い発見していない手動でヌルを避けることなく、シリーズへの変換を行う方法。あなたはSeries.str.extract
方法使用できるカスタム関数と
はDF [ '猫']のdf [ 'テキストを'] = 'を試してみてください適用(ラムダX:。pd.isnull場合は '不明'(x)は、他のx.splitを( ':')[0 ]) ' – EdChum