为了账号安全,请及时绑定邮箱和手机立即绑定

按索引索引 pandas 数据帧

按索引索引 pandas 数据帧

撒科打诨 2022-05-11 17:06:31
示例数据框:data = [["2011-01-01",23],["2011-01-02",33],["2011-01-03",43],["2011-01-04",53]]df= pd.DataFrame(data,columns = ["A","B"])df["A"] = pd.to_datetime(df["A"])df.index = df["A"]del df["A"]操作:            BA   2011-01-01  232011-01-02  332011-01-03  432011-01-04  53我正在尝试使用以下代码将此数据框拆分为两部分:part1 = df.loc[:"2011-01-02"]操作:            BA   2011-01-01  232011-01-02  33第2部分:part2 = df.loc["2011-01-02":]操作:            BA   2011-01-02  332011-01-03  432011-01-04  53但是索引为“2011-01-02”的行在两个部分(part1 和 part2)中。对 pandas 1-liners 的任何建议,以仅在 1 部分而不是两者中获得该行。
查看完整描述

3 回答

?
30秒到达战场

TA贡献1828条经验 获得超6个赞

这种行为是预期的(直到今天我也不知道)


这种类型的切片也适用于具有 DatetimeIndex 的 DataFrame。由于部分字符串选择是标签切片的一种形式,因此将包括端点。这将包括包含日期的匹配时间:来自http://pandas-docs.github.io/pandas-docs-travis/user_guide/timeseries.html#indexing。


关于标签切片行为


请注意,与通常的 python 切片相反,开始和停止都包含在 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.loc.html#pandas.DataFrame.loc


In [16]: df[df.index < '2011-01-02']

Out[16]:

             B

A

2011-01-01  23


In [17]: df[df.index >= '2011-01-02']

Out[17]:

             B

A

2011-01-02  33

2011-01-03  43

2011-01-04  53


In [18]: df[df.index > '2011-01-02']

Out[18]:

             B

A

2011-01-03  43

2011-01-04  53


查看完整回答
反对 回复 2022-05-11
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

slice = df.index > "2011-01-02"

df[slice]

df[~slice]


查看完整回答
反对 回复 2022-05-11
?
千万里不及你

TA贡献1784条经验 获得超9个赞

与get_loc_iloc


df.iloc[:df.index.get_loc('2011-01-02')]

                    A   B

A                        

2011-01-01 2011-01-01  23


df.iloc[df.index.get_loc('2011-01-02'):]

                    A   B

A                        

2011-01-02 2011-01-02  33

2011-01-03 2011-01-03  43

2011-01-04 2011-01-04  53


查看完整回答
反对 回复 2022-05-11
  • 3 回答
  • 0 关注
  • 170 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号