如何使用 pandas 识别字符串数据中的 float/numbers

How to identify float/numbers in String data using pandas

我有一个如下所示的数据框

df = pd.DataFrame({'val': ['test','depat','23.1','25.0','31',np.nan]})

我想创建两个新列 val_numval_string

在 val_num 中,我想存储 numeric/int 个值

在val_string中,我想存储字符串值

所以,我尝试了以下

df['val_num'] = pd.to_numeric(df['val'],errors='coerce')
df['val_string'] = (df[pd.to_numeric(df['val'],errors='coerce').isna()])

虽然上面的工作正常,有没有像to_numeric这样优雅的函数来使用to_string识别字符串对象?

is there any elegant function like to_numeric for identifying string objects using to_string

不,还不存在。

如果值混合 - 这意味着可以使用 isinstance 方法对其进行测试:

df = pd.DataFrame({'val': ['test','depat',23.1,25.0,31,np.nan]})

df['num'] = df.loc[df['val'].apply(lambda x: isinstance(x, (float, int))), 'val']
df['str'] = df.loc[df['val'].apply(lambda x: isinstance(x, str)), 'val']
print (df)
     val   num    str
0   test   NaN   test
1  depat   NaN  depat
2   23.1  23.1    NaN
3   25.0  25.0    NaN
4     31    31    NaN
5    NaN   NaN    NaN

不幸的是在现实生活中所有数据都是字符串,因此需要您的解决方案 - 先转换为数字然后处理:

df = pd.DataFrame({'val': ['test','depat','23.1','25.0','31',np.nan]})

df['num'] = df.loc[df['val'].apply(lambda x: isinstance(x, float)), 'val']
df['str'] = df.loc[df['val'].apply(lambda x: isinstance(x, str)), 'val']
print (df)
     val  num    str
0   test  NaN   test
1  depat  NaN  depat
2   23.1  NaN   23.1
3   25.0  NaN   25.0
4     31  NaN     31
5    NaN  NaN    NaN

df['num'] = pd.to_numeric(df['val'],errors='coerce')
df['vstring'] = df.loc[df['num'].isna(), 'val']
print (df)
     val   num vstring
0   test   NaN    test
1  depat   NaN   depat
2   23.1  23.1     NaN
3   25.0  25.0     NaN
4     31  31.0     NaN
5    NaN   NaN     NaN