Pandas仅从数据帧中选择数字或整数字段

fra*_*o_b 10 python numpy pandas

我有这个Pandas数据帧(df):

     A    B
0    1    green
1    2    red
2    s    blue
3    3    yellow
4    b    black
Run Code Online (Sandbox Code Playgroud)

类型是对象.

我选择A值为整数或数字的记录:

     A    B
0    1    green
1    2    red
3    3    yellow
Run Code Online (Sandbox Code Playgroud)

谢谢

EdC*_*ica 13

调用apply数据帧(注意双方括号df[['A']]而不是df['A'])并调用字符串方法isdigit(),然后我们设置param axis=1以逐行应用lambda函数.这里发生的是索引用于创建布尔掩码.

In [66]:
df[df[['A']].apply(lambda x: x[0].isdigit(), axis=1)]
Out[66]:
       A       B
Index           
0      1   green
1      2     red
3      3  yellow
Run Code Online (Sandbox Code Playgroud)

更新

如果您使用的是0.16.0或更高版本,则以下内容也适用:

In [6]:
df[df['A'].astype(str).str.isdigit()]

Out[6]:
   A       B
0  1   green
1  2     red
3  3  yellow
Run Code Online (Sandbox Code Playgroud)

在这里,我们将系列转换为str使用astype,然后调用矢量化str.isdigit

另请注意,convert_objects已弃用,应使用to_numeric最新版本0.17.0或更新版本


Jef*_*eff 8

你可以使用convert_objects,什么时候convert_numeric=True强行设置所有非数字nan.删除它们并建立索引会获得结果.

这比使用apply更大的帧要快得多,因为这都是在cython中实现的.

In [30]: df[['A']].convert_objects(convert_numeric=True)
Out[30]: 
    A
0   1
1   2
2 NaN
3   3
4 NaN

In [31]: df[['A']].convert_objects(convert_numeric=True).dropna()
Out[31]: 
   A
0  1
1  2
3  3

In [32]: df[['A']].convert_objects(convert_numeric=True).dropna().index
Out[32]: Int64Index([0, 1, 3], dtype='int64')

In [33]: df.iloc[df[['A']].convert_objects(convert_numeric=True).dropna().index]
Out[33]: 
   A       B
0  1   green
1  2     red
3  3  yellow
Run Code Online (Sandbox Code Playgroud)


Vid*_*a G 5

请注意,convert_objects已弃用

>>> df[['A']].convert_objects(convert_numeric=True)
__main__:1: FutureWarning: convert_objects is deprecated.  Use the data-type specific converters pd.to_datetime, pd.to_timedelta and pd.to_numeric.
Run Code Online (Sandbox Code Playgroud)

从 0.17.0 开始:使用pd.to_numeric,设置errors='coerce'以便不正确的解析返回 NaN。使用notnull一个布尔口罩返回使用原始数据帧:

>>> df[pd.to_numeric(df.A, errors='coerce').notnull()]
   A       B
0  1   green
1  2     red
3  3  yellow
Run Code Online (Sandbox Code Playgroud)