在python中,如何删除dataframe中没有数字的单元格?
在python中,如何删除dataframe中没有数字的单元格 我正在尝试从仅包含字符的数据场中删除单元格 我想删除像Farnet这样的单元格,并使其为空 实际上,我检查了一些链接,例如,但它没有回答我的问题,因为我想操作单元格我相信您需要:在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
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 belowerror 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}$'