我正在尝试从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
答案 0 :(得分:2)
您可以使用pd.DataFrame.select_dtypes
和pd.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)