問題描述pandas實際開發(fā)中進行運算時的一個坑!import pandas as pd
v = {'value': 'a'}
d = [{'name': 'abc', 'age': 10}, {'name': None, 'age': 11}, {'name': 'def', 'age': 9}]
df = pd.DataFrame(d)
new_1 = df[(df['age'] >= 10) | df['name'].str.contains(v['value'])]
new_2 = df[df['name'].str.contains(v['value']) | (df['age'] >= 10)]
print('-'*80)
print(df)
print('-'*80)
print(new_1)
print('-'*80)
print(new_2)輸出--------------------------------------------------------------------------------
age name0 10 abc1 11 None2 9 def-------------------------------------------------------------------------------- age name0 10 abc1 11 None-------------------------------------------------------------------------------- age name0 10 abc想請問為什么 new1 和 new2的結(jié)果不一樣?
1 回答

慕仙森
TA貢獻1827條經(jīng)驗 獲得超8個贊
>>> df.dtypes age int64 name object dtype: object>>> (df['age'] >= 10)0 True1 True2 FalseName: age, dtype: bool>>> df['name'].str.contains(v['value'])0 True1 None # 注意這個2 FalseName: name, dtype: object>>> (df['age'] >= 10) | df['name'].str.contains(v['value'])0 True1 True2 Falsedtype: bool>>> df['name'].str.contains(v['value']) | (df['age'] >= 10)0 True1 False2 Falsedtype: bool
None 是python中的對象,不是pandas的數(shù)據(jù)類型,以python的規(guī)則進行運算
把None改為''
.
>>> df2 = pd.DataFrame([{'name': 'abc', 'age': 10}, {'name': '', 'age': 11}, {'name': 'def', 'age': 9}])>>> df2.dtypes age int64 name object dtype: object>>> (df2['age'] >= 10)0 True1 True2 FalseName: age, dtype: bool>>> df2['name'].str.contains(v['value'])0 True1 False2 FalseName: name, dtype: bool>>> (df2['age'] >= 10) | df2['name'].str.contains(v['value'])0 True1 True2 Falsedtype: bool>>> df2['name'].str.contains(v['value']) | (df2['age'] >= 10)0 True1 True2 Falsedtype: bool>>>
- 1 回答
- 0 關(guān)注
- 496 瀏覽
添加回答
舉報
0/150
提交
取消