df.apply -- 仅在特定类型的列上
在Pandas中,有没有简单的方法可以只对特定类型的列应用一个函数?
举个例子,我需要在把一个包含控制字符的数据表保存为csv文件之前,先对它进行预处理。
我现在是这样做的:
df[string_column] = df[string_column].apply(
lambda x:
x.encode('ascii', errors='ignore').replace('\n',' ').replace('\t', ' '))
但是这样做需要我知道哪些列是字符串类型。
有没有简单的方法可以只对某种类型的列应用一个函数呢?
1 个回答
2
我觉得我会根据数据类型(dtype)来列出所有字符串类型的列,因为它们的类型是object
。所以可以像下面这样做:
>>> df = pd.read_csv(StringIO(data),header=True)
>>> print df
A B C D
0 1 a 6 ff
1 2 b 7 cc
2 3 c 8 dd
3 4 d 9 ee
4 5 e 10 gg
>>> print df.dtypes
A int64
B object
C int64
D object
然后你可以用类似下面的方式获取所有的字符串列:
>>> print df.dtypes[df.dtypes == 'object'].index.tolist()
['B', 'D']
现在你可以用这个列表来做一些操作,比如用apply函数或者其他方法。