numpy.select(condlist, choicelist, default=0)
链接,
当DataFame新生成字段时,choicelist
如下3种会使得default的“0”的type分别为str
和int
:
一、当select函数里
choicelist
是指定string value时,type为str
:
f['new'] = numpy.select([mask], ['value'], default=0)
二、当select函数里
choicelist
是df.series时,type为数值
:
f['new'] = numpy.select([mask], [df.Series], default=0)
三、当select函数里
choicelist
是int / float时,type为数值
:
f['new'] = numpy.select([mask], [int], default=0)
import pandas as pd
import numpy as np
df= pd.DataFrame({'col1': ['b', 'str', 1, 1],
'col2': ['str', 12, 5, 41]})
# pinrt(df)
col1 col2
0 b 22
1 str 12
2 1 5
3 1 41
m1 = d.col1 == 'b'
df['t1'] = np.select([m1], ['22'], default=0)
df['t2'] = np.select([m1], [df['col2']], default=0)
df['t3'] = np.select([m1], [0.1], default=0)
for i in ['t1', 't2', 't3']:
print(any(df[f'{i}']==0))
print(any(df[f'{i}']=='0'))
# 结果如下:
False
True
True
False
True
False
当default=np.nan
时候:
m1 = d.col1 == 'b'
df['t1'] = np.select([m1], ['22'], default=np.nan)
df['t2'] = np.select([m1], [df['col2']], default=np.nan)
df['t3'] = np.select([m1], [0.1], default=np.nan)
for i in ['t1', 't2', 't3']:
print(any(df[f'{i}']=='nan'))
print(any(df[f'{i}'].isna()))
print(any(df[f'{i}'].isna()))
# 结果如下
True
False
False
False
True
True
False
True
True