从Pandas Dataframe中删除不包含数字且不包含文字的行

时间:2017-12-09 10:55:24

标签: python pandas

我有一个名为' str'在熊猫数据框架中。 因为我打算从中删除所有不包含数值的行[0-9] 或文字[a-z],以下陈述不起作用:

data[data['str'].str.contains(r"[a-zA-z0-9]") == True]

执行后我分析了列值。还有一些值如下:

(" [["," ^")

并删除值(在这种情况下不需要):

(" 1"," 2016"," 20160715")

有没有人可以帮助我?

最好的问候

2 个答案:

答案 0 :(得分:0)

你可以使用pandas dropna函数,它将删除包含任何空值的整行。

DF = df.dropna()

其中df是您的数据框

答案 1 :(得分:0)

import pandas as pd
data = pd.DataFrame([[']','//','.'],['a2','b2','c2'],['a3','b',']']],columns=['A','B','C'])
test = data['A']str.match('^[\w\d_-]*$')
data = data[test]

输出:

  A   B   C
1  a2  b2  c2
2  a3   b   ]

如果您对非字母非数字字符没问题,我认为最好的方法是使用data.replace后跟这些字符的字典。

import pandas as pd
import numpy as np
df = pd.DataFrame([[']','//','.'],['a!','b2','c2'],['a3','b!',']']],columns=['A','B','C'])
df
Output:
 A   B   C
0   ]  //   .
1  a!  b2  c2
2  a3  b!   ]

remove = {'.':np.nan, '/':np.nan, ']':np.nan}  # The format is {'thing to be replaced':'new thing'}

df['A'] = df['A'].replace(remove) # Checks one column
df
Output:
    A    B   C
0  NaN  //   .
1   a!  b2  c2
2   a3  b!   ]

df.dropna()
df
Output:
  A   B   C
1  a!  b2  c2
2  a3  b!   ]

确保替换您的specfic列。 dropna()将删除任何具有任何NaN值的列。

作为警示,请勿使用“str”等Python方法作为占位符。但是,可能不会把你烧到这里。