【发布时间】:2019-02-18 15:02:05
【问题描述】:
我正在组织一些计划的数据,其中包含计划阶段的信息,P(初步)或F(最终)。我正在使用 pandas 文档中examples 中显示的方法。
df1 = pd.read_excel('FilePath', sheetname = 'ForFilter')
df1
landuse_SUB_ID TYPE RECD_DATE PHASE LAND_USE CPACTIONDA
0 24 1 2000-04-07 P ROW 2000-05-04
1 24 1 2000-04-07 P NONE 2000-05-04
2 25 1 2000-08-10 P COMM 2000-09-08
3 34 1 2000-04-14 F REC 2000-04-14
4 34 1 2000-04-14 F SFD 2000-04-14
5 35 1 2000-01-20 P NONE 2000-02-02
6 42 1 2000-04-04 P SFD 2000-05-01
7 42 1 2000-12-06 P SFD 2001-01-03
8 43 1 2000-09-07 P NONE 2000-09-21
9 51 1 2000-11-10 P NONE 2000-11-28
10 53 1 2000-02-22 F SFD 2000-02-22
在使用了示例中的方法(使用like 和regex)之后,在我看来这些方法只能过滤索引列中的值。因此我更改了索引:
df1_filter1 = df1.set_index('PHASE')
landuse_SUB_ID TYPE RECD_DATE LAND_USE CPACTIONDA
PHASE
P 24 1 2000-04-07 ROW 2000-05-04
P 24 1 2000-04-07 NONE 2000-05-04
P 25 1 2000-08-10 COMM 2000-09-08
F 34 1 2000-04-14 REC 2000-04-14
F 34 1 2000-04-14 SFD 2000-04-14
P 35 1 2000-01-20 NONE 2000-02-02
P 42 1 2000-04-04 SFD 2000-05-01
P 42 1 2000-12-06 SFD 2001-01-03
P 43 1 2000-09-07 NONE 2000-09-21
P 51 1 2000-11-10 NONE 2000-11-28
F 53 1 2000-02-22 SFD 2000-02-22
现在数据框使用Phase作为索引,我使用like方法过滤df1_filter1:
df1_filter1.filter(like = 'F', axis = 0)
我得到了错误
“ValueError:无法从重复的轴重新索引”
这对我来说似乎是一个非常简单的操作,所以我只是想知道我做错了什么导致了这个错误。对于我的问题,什么是最好的方法(最少的步骤和最干净的代码)。
【问题讨论】:
-
我无法重现此问题。当我运行您的代码时,我得到一个过滤的数据框,其中包含由 F 索引的 3 行
-
@Andrew 那太荒谬了。我会再试一次。请问一下过滤器文档中使用的方法?
like = ABC是否过滤值仅为ABC或包含ABC的行?regex = 'e$'是否意味着过滤以e结尾的行?谢谢。