2016-02-28 60 views
5

我想要删除任何列中的所有行(或不带所有行)问号符号。我也想将元素更改为float类型。在“熊猫”数据框的任意列中删除具有“问号”值的行

输入:

X Y Z 
0 1 ? 
1 2 3 
? ? 4 
4 4 4 
? 2 5 

输出:

X Y Z 
1 2 3 
4 4 4 

优选使用大熊猫数据帧的操作。

+1

'OUT = df.replace({ '?':numpy.nan})。dropna() .astype(float)' –

+0

它与下面的答案是一样的,但是对于一行代码非常好。谢谢 – Anonymous

回答

3

您可以先尝试在列中找到字符串?,创建布尔掩码和最后一个筛选器行 - 使用boolean indexing。如果你需要转换列float,使用astype

print ~((df['X'] == '?') (df['Y'] == '?') | (df['Z'] == '?')) 
0 False 
1  True 
2 False 
3  True 
4 False 
dtype: bool 


df1 = df[~((df['X'] == '?') | (df['Y'] == '?') | (df['Z'] == '?'))].astype(float) 
print df1 
    X Y Z 
1 1 2 3 
3 4 4 4 

print df1.dtypes 
X float64 
Y float64 
Z float64 
dtype: object 

或者你可以尝试:

df['X'] = pd.to_numeric(df['X'], errors='coerce') 
df['Y'] = pd.to_numeric(df['Y'], errors='coerce') 
df['Z'] = pd.to_numeric(df['Z'], errors='coerce') 
print df 
    X Y Z 
0 0 1 NaN 
1 1 2 3 
2 NaN NaN 4 
3 4 4 4 
4 NaN 2 5 
print ((df['X'].notnull()) & (df['Y'].notnull()) & (df['Z'].notnull())) 
0 False 
1  True 
2 False 
3  True 
4 False 
dtype: bool 

print df[ ((df['X'].notnull()) & (df['Y'].notnull()) & (df['Z'].notnull())) ].astype(float) 
    X Y Z 
1 1 2 3 
3 4 4 4 
+0

我得到一个TypeError:invalid type comparison – Anonymous

+0

什么是带'?'的值类型?请尝试检查它'print type(df.at [0,'Z'])' - 有'?' – jezrael

+0

它适用于一列。所以它为一个布尔索引器删除行很好。但只要我使用| (或)它失败 – Anonymous

相关问题