我有像下面这样的Pandas DataFrame, "字符串数据类型:
col1
----
123D
2222CCA123
DRftu22876
12345
我想只选择行,其中值是没有字符,因此我需要下面的东西:
col1
-----
12345
如何在Python Pandas中实现?
只是为了一些变化,一个非基于str
的方式。这里我尝试将值转换为数字,然后使用转换是否有效:
print(df[pd.to_numeric(df.col1, errors='coerce').isna()])
print(df[pd.to_numeric(df.col1, errors='coerce').nota()])
输出:
col1
0 123D
1 2222CCA123
2 DRftu22876
col1
3 12345
您可以使用regular expression
只获取您想要的值。
在Pandas中,您可以以各种方式使用regular expression
,如下所示:
import pandas as pd
df = pd.DataFrame(
{
'col1': [
'123D',
'2222CCA123',
'DRftu22876',
'12345',
'abCdeF',
'ABCDEf',
]
}
)
print(df)
# col1
# 0 123D
# 1 2222CCA123
# 2 DRftu22876
# 3 12345
- 使用
contains
函数
# Using contains function
df1 = df[df['col1'].str.contains('^[0-9]+$', regex=True)]
print(df1)
# col1
# 3 12345
- 使用
match
函数
# Using match function
df2 = df[df['col1'].str.match('^[0-9]+$')]
print(df2)
# col1
# 3 12345
匹配模式可以改变。有更多的方法来过滤数字值。
如果只想获得字符值,可以更改匹配模式,如下所示;
# Using contains function
df1 = df[df['col1'].str.contains('^[^0-9]+$', regex=True)] # or '^[a-zA-Z]+$' # or '^[a-zA-Z]+$' instead of '^[^0-9]+$'
print(df1)
# 4 abCdeF
# 5 ABCDEf
# Using match function
df2 = df[df['col1'].str.match('^[^0-9]+$')] # or '^[a-zA-Z]+$' instead of '^[^0-9]+$'
print(df2)
# 4 abCdeF
# 5 ABCDEf
要获得更多关于regular expression
的知识,并获得另一种模式的值,请参阅https://www.programiz.com/python-programming/regex