使用来自另一个数据帧

时间:2017-08-23 10:33:21

标签: pandas

我有一个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)

我知道错误是由语言数据帧的索引引起的。但我认为必须有一些好的解决方案来避免它。谢谢。

1 个答案:

答案 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中那些与语言中的等价物等于所需值的列。