在python中,如何删除dataframe中没有数字的单元格?

在python中,如何删除dataframe中没有数字的单元格?,python,pandas,dataframe,Python,Pandas,Dataframe,在python中,如何删除dataframe中没有数字的单元格 我正在尝试从仅包含字符的数据场中删除单元格 我想删除像Farnet这样的单元格,并使其为空 实际上,我检查了一些链接,例如,但它没有回答我的问题,因为我想操作单元格我相信您需要: df = pd.DataFrame({0:['a','DT8510','AFT1',np.nan], 1:['a','DT8510','u','as1']}) print (df) 0 1

在python中,如何删除dataframe中没有数字的单元格

我正在尝试从仅包含字符的数据场中删除单元格

我想删除像Farnet这样的单元格,并使其为空

实际上,我检查了一些链接,例如,但它没有回答我的问题,因为我想操作单元格

我相信您需要:

df = pd.DataFrame({0:['a','DT8510','AFT1',np.nan],
                   1:['a','DT8510','u','as1']})
print (df)
        0       1
0       a       a
1  DT8510  DT8510
2    AFT1       u
3     NaN     as1

import re

d = re.compile('\d')
df = df.applymap(lambda x: x if d.search(str(x)) else np.nan)
print (df)
        0       1
0     NaN     NaN
1  DT8510  DT8510
2    AFT1     NaN
3     NaN     as1
另一个解决方案:

df = df.where(df.apply(lambda x: x.astype(str).str.contains('\d')))

@jezrael的类似解决方案

import pandas as pd
import numpy as np
df = pd.DataFrame(data={'A':['1','textonly'],'B':['textandnum2','2']})
for column in df.columns:
    df[column][~df[column].str.contains('([1-9])')] = np.nan
df

我认为您可以使用正则表达式来查找没有数字的单元格

^([^0-9]*)$expression将查找所有没有数字的单元格

df = df.replace(r'^([^0-9]*)$', np.nan, regex=True)
这将用NaN替换所有带有数字的单元格,然后您可以使用dropna删除单元格

df = df.dropna()

我希望这会有所帮助。

因此,删除了带有
E2151的行以及Farnet T3886
,因为
A
Farnet
?我想OP只希望这两个单元格为空或用非替换。请在代码标签中以文本形式而非图像形式发布示例@f.ayes@Rahul您的声明是正确的。似乎
df.replace
的输出不是
数据帧,因为下面的代码中没有一个在工作,并且recive below
error AttributeError:“NoneType”对象没有属性“dropna”
,这也不起作用
df.to_csv(“s1.csv”,sep=”,”)
,现在您可以试试。它应该会起作用。我已经更新了正则表达式并删除了inplace=True。非常感谢,你的解决方案确实有效,但是你能解释得更详细一些,并帮我删除其中只有少于4个数字的一个吗?@f.a-因此删除了
'AFT1'
,因为只有一个数字?@f.a-然后将
\d
更改为
\d{4}
,非常感谢,还有一个问题,实际上我正试图提取如下模式:T1370,一个以B、H、N、T、E开头的字符串,后面有四个数字,省略后面或前面的任何内容,提取一个单元格中可以提取的尽可能多的模式。@f.a-use
'^[BHNTE]{1}\d{4}$'