使用pandas dtype作为条件

时间:2018-10-18 16:04:23

标签: python pandas

我正在尝试从pandas数据框中某些列中的字符串中删除某些字符。我正在for循环中完成所有这些操作,因此我想在循环中使用if语句对所有“对象” dtype列执行操作。

for col in pitchtype :
pitchtype[col] = pitchtype[col].replace(np.nan,0) 
if pitchtype[col].dtype == 'object':
    pitchtype[col] = pitchtype[col].map(lambda x: x.replace(' %',''))

是否有办法在if语句中使该条件产生?

编辑:在下面添加了我的DF。基本上,标头中包含%的列的值中带有'%'符号,可防止它们浮动。我正在尝试删除'%',然后将列更改为float。

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 264 entries, 0 to 263

数据列(共18列):

Name        264 non-null object
Team        264 non-null object
FB%         264 non-null object
FBv         264 non-null float64
SL%         264 non-null object
SLv         264 non-null float64
CT%         264 non-null object
CTv         264 non-null float64
CB%         264 non-null object
CBv         264 non-null float64
CH%         264 non-null object
CHv         264 non-null float64
SF%         264 non-null object
SFv         264 non-null float64
KN%         264 non-null object
KNv         264 non-null float64
XX%         264 non-null object
playerid    264 non-null int64

dtypes: float64(7), int64(1), object(10)
memory usage: 37.2+ KB

2 个答案:

答案 0 :(得分:2)

您可以使用pd.DataFrame.select_dtypespd.Series.str.rstrip

for col in df.select_dtypes(['object']):
    df[col] = pd.to_numeric(df[col].str.rstrip('%'), errors='coerce')

pd.to_numeric执行到float的转换。 errors='coerce'给出NaN表示不可转换的值。

答案 1 :(得分:0)

我认为这也许是您要查找的内容,请检查单个对象是否为字符串。

if pitchtype[col].dtype == object: # No quotes around it!
    pitchtype[col] = pitchtype[col].map(lambda x: x.replace(' %','') if type(x) == str else x)