我有一个1 * 20000列的布尔值数据框。 我需要这些布尔值来选择数据帧(551行* 20000列)列。
[In] web.shape
[Out] (550, 20000)
[In] language.shape
[Out] (1, 20000)
[In] language
[Out] Index(['zh', 'zh', 'zh', 'zh', 'zh', 'zh', 'zh', 'zh', 'zh', 'zh',
...'na', 'na', 'na', 'na', 'na', 'na', 'na', 'na', 'na', 'na'],
dtype='object', name='Page', length=20000)
现在我想取出那些 web 的列,其中语言是中文('zn'),即列位置 TRUE 。我需要将这些列作为单独的数据框。网名和语言的列名不同。
[In] language=pd.DataFrame(language)
[In] English =web.iloc[:,language=='zn']
[Out] ValueError: Buffer has wrong number of dimensions (expected 1, got 2)
我知道错误是由语言数据帧的索引引起的。但我认为必须有一些好的解决方案来避免它。谢谢。
答案 0 :(得分:0)
我们举一个简化的例子,所以我可以在这里展示这个过程。
language = pd.Index(['zh', 'zh', 'zh', 'zh', 'zh', 'zh', 'zh', 'zh', 'zh','zh','na', 'na', 'na', 'na', 'na', 'na', 'na', 'na', 'na', 'na'],
dtype='object', name='Page')
web = pd.DataFrame(columns = range(len(language)))
web.shape
(0, 20)
language.shape
(0, 20)
因此两者都有相同数量的列,并且您希望仅将web
过滤到language
中等效条目为'zh'
的那些列。
当我运行你的代码时:
English = web.iloc[:,language=='zh']
它不会返回错误,它会返回您所追求的内容。这让我相信在您的描述中我们没有看到一些代码。
您想要的另一种解决方案是:
English = web[[i for i,j in zip(web.columns, language) if j == 'zh']]
也只返回web中那些与语言中的等价物等于所需值的列。