如何使用 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_num
和 val_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
我有一个如下所示的数据框
df = pd.DataFrame({'val': ['test','depat','23.1','25.0','31',np.nan]})
我想创建两个新列 val_num
和 val_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