Who*_*ack 6 python dataframe pandas
给定df具有不同数据类型的 Pandas ,df.select_dtypes对于仅保留所需列或删除特定应用程序不需要的列非常有用。
但是,似乎无法string使用这种方法来解决dtype。
从文档(强调我的):
ValueError
如果 include 和 exclude 都为空
如果 include 和 exclude 有重叠元素
如果传入任何类型的字符串 dtype。
和
要选择字符串,您必须使用对象 dtype,但请注意,这将返回所有对象 dtype 列
实际上, usingdf.select_dtypes(exclude=['str'])会引发错误(尽管它是 aTypeError而不是ValueErrordocs 声称的 a)并且 usingdf.select_dtypes(exclude=['object'])会删除所有object列,而不仅仅是string列。
给出df这样的:
df = pd.DataFrame({'int_col':[0,1,2,3,4],
                   'dict_col':[dict() for i in range(5)],
                   'str_col':list('abcde')})
并考虑到
df.dtypes
是object两个str_col和dict_col:
排除或包含所有字符串列的最佳方法是什么?
cs9*_*s95 10
选项1
使用df.applymap和type,并等于str:
In [377]: (df.applymap(type) == str).all(0)
Out[377]: 
dict_col    False
int_col     False
str_col      True
dtype: bool
每列中的每个元素都转换为其类型,然后等于str. 之后,只需致电.all(0)或.min(0)获得每列的判决。
选项 2
使用df.applymap和isinstance:
In [342]: df.applymap(lambda x: isinstance(x, str)).all(0)
Out[342]: 
dict_col    False
int_col     False
str_col      True
要包含这些字符串列,您可以对列进行布尔索引:
idx = ... # one of the two methods above
df_new = df[df.columns[idx]]
排除将是
df_new = df[df.columns[~idx]]
| 归档时间: | 
 | 
| 查看次数: | 6845 次 | 
| 最近记录: |