具有多个列范围的 Pandas 数据框切片[重复]
Posted
技术标签:
【中文标题】具有多个列范围的 Pandas 数据框切片[重复]【英文标题】:Pandas dataframe slicing with multiple column ranges [duplicate] 【发布时间】:2020-11-06 10:13:58 【问题描述】:我有一个带有许多标记列的 pandas 数据框。例如:
import numpy as np
import pandas as pd
cols = ['lat', 'long', 'foo', 'bar', 'year', 'month', 'day', 'hour', 'min', 'sec']
df = pd.DataFrame(np.random.random((10, 10)), columns=cols)
我想用多个范围分割这个数据帧。例如:
df.loc[:, ('lat':'long', 'year':'day')]
但这似乎是不可能的。有没有办法做到这一点?
此问题与Slice multiple column ranges with Pandas 和Pandas Dataframe select multiple discontinuous columns/slices 有关,但我想使用列名而不是索引进行切片。 np.r_
似乎不支持字符串范围,只支持数字范围。
【问题讨论】:
【参考方案1】:按多个标签范围切片更具挑战性且支持较少,因此让我们尝试在索引范围上切片:
loc = df.columns.get_loc
df.iloc[:, np.r_[loc('lat'):loc('long')+1, loc('year'):loc('day')+1]]
lat long year month day
0 0.218559 0.418508 0.345499 0.166776 0.878559
1 0.572760 0.898007 0.702427 0.386477 0.694439
2 0.803740 0.983359 0.945517 0.649540 0.860832
3 0.873401 0.906277 0.463535 0.610538 0.496282
4 0.187359 0.687674 0.039455 0.647117 0.638054
5 0.169531 0.794548 0.352917 0.484498 0.697736
6 0.022867 0.375123 0.444112 0.498140 0.414346
7 0.729086 0.415919 0.430047 0.734766 0.556216
8 0.138769 0.614932 0.109311 0.539576 0.289299
9 0.037969 0.500108 0.758036 0.262273 0.100859
当按位置索引时,我需要将+1
添加到正确的索引中,因为它是右排他的。
另一种选择是分割各个部分并连接:
ranges = [('lat', 'long'), ('year', 'day')]
pd.concat([df.loc[:, i:j] for i, j in ranges], axis=1)
lat long year month day
0 0.218559 0.418508 0.345499 0.166776 0.878559
1 0.572760 0.898007 0.702427 0.386477 0.694439
2 0.803740 0.983359 0.945517 0.649540 0.860832
3 0.873401 0.906277 0.463535 0.610538 0.496282
4 0.187359 0.687674 0.039455 0.647117 0.638054
5 0.169531 0.794548 0.352917 0.484498 0.697736
6 0.022867 0.375123 0.444112 0.498140 0.414346
7 0.729086 0.415919 0.430047 0.734766 0.556216
8 0.138769 0.614932 0.109311 0.539576 0.289299
9 0.037969 0.500108 0.758036 0.262273 0.100859
【讨论】:
以上是关于具有多个列范围的 Pandas 数据框切片[重复]的主要内容,如果未能解决你的问题,请参考以下文章
使用numpy数组更改python pandas数据框切片中的元素[重复]