pandas select from Dataframe using startswith
这项工作(使用熊猫12 dev)
1 | table2=table[table['SUBDIVISION'] =='INVERNESS'] |
然后我意识到我需要用"开始于"来选择这个字段,因为我错过了一堆。所以,根据熊猫医生的说法,我尽可能地跟在后面,我试过了。
1 2 | criteria = table['SUBDIVISION'].map(lambda x: x.startswith('INVERNESS')) table2 = table[criteria] |
号
并且得到attributeError:'float'对象没有属性'startswith'
所以我用相同的结果尝试了另一种语法
1 | table[[x.startswith('INVERNESS') for x in table['SUBDIVISION']]] |
参考http://pandas.pydata.org/pandas docs/stable/indexing.html布尔索引第4节:序列的列表理解和映射方法也可用于生成更复杂的标准:
我错过了什么?
您可以使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | In [11]: s = pd.Series(['a', 'ab', 'c', 11, np.nan]) In [12]: s Out[12]: 0 a 1 ab 2 c 3 11 4 NaN dtype: object In [13]: s.str.startswith('a', na=False) Out[13]: 0 True 1 True 2 False 3 False 4 False dtype: bool |
布尔型索引将很好地工作(我更喜欢使用
1 2 3 4 5 | In [14]: s.loc[s.str.startswith('a', na=False)] Out[14]: 0 a 1 ab dtype: object |
号
.
看起来系列/列中至少有一个元素是float,它没有startsWith方法,因此attributeError,列表理解应该引发相同的错误…
检索以所需字符串开头的所有行
1 | dataFrameOut = dataFrame[dataFrame['column name'].str.match('string')] |
检索包含所需字符串的所有行
1 | dataFrameOut = dataFrame[dataFrame['column name'].str.contains('string')] |
。
您可以使用
1 | table2=table[table['SUBDIVISION'].apply(lambda x: x.startswith('INVERNESS')] |
假设您的"细分"列是正确的类型(字符串)