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或更新版本
你可以使用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)
请注意,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)