删除Pandas数据框架中任意列中带有“问号”值的行

ajsxfq5m  于 2023-06-20  发布在  其他
关注(0)|答案(3)|浏览(127)

我想删除任何列中的所有行(或删除所有不带问号符号的行)。我还想将元素更改为float类型。

输入:

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

输出:

X Y Z
1 2 3
4 4 4

最好使用pandas dataframe操作。

mhd8tkvw

mhd8tkvw1#

你可以尝试先在列中查找字符串?,创建布尔掩码,最后过滤行-使用布尔索引。如果需要将列转换为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

更好的是用途:

df = df[(df != '?').all(axis=1)]

或者:

df = df[~(df == '?').any(axis=1)]
6kkfgxo0

6kkfgxo02#

您可以尝试将?替换为空值

import numpy as np

data = df.replace("?", np.NaN)

如果要替换特定列,请尝试以下操作:

data = df["column name"].replace("?", np.NaN)
mwg9r5ms

mwg9r5ms3#

删除pandas Dataframe 中任何列中带有“问号”值的行

import numpy as np 
import pandas as pd 
 
df = pd.DataFrame(columns=["col1", "col2"]) 
df.loc[0] = [ "foo",  "bar" ] 
df.loc[1] = [ "f?oo", "bar" ] 
df.loc[2] = [ "foo",  "?ba?"] 
df.loc[3] = [ "foo",  "?"] 
df.loc[4] = [ np.nan,  "bar"] 
print(df) 
 
df = df.replace("?", np.nan) 
df = df.dropna() 
print(df)

图纸:

col1  col2
0   foo   bar
1  f?oo   bar
2   foo  ?ba?
3   foo     ?
4   NaN   bar

   col1  col2
0   foo   bar
1  f?oo   bar
2   foo  ?ba?

相关问题