python - 提取两个值之间的 Pandas 列
问题描述
我有如下数据。前 2 列是 df[3:60] 列的字符串和列名作为连续年份。如何将 2005 年:2010 年和 2015 年之间的所有列提取到所有内容
Country Indicator 1960 1961 1962 1963.....
Aruba US$ 15678 156789 156790 156791
Afgha US$ 68239 78239 88239 98239
Angola US$ 45678 55678 65678 75678
Albania US$ 89345 99345 109345 119345
Andorra US$ 62790 72790 82790 92790
Arab US$ 12987 22987 32987 42987
UAE US$ 6047 16047 26047 36047
我尝试提取列的索引
df.index.get_loc('2005') <- 45
df.index.get_loc('2010') <- 50
df.index.get_loc('2015') <- 55
df.iloc[:, [45:50,55:]]
上面的代码显示了一个错误。如何提取具有索引范围的多个列
解决方案
您可以使用np.r_
:
a = df.columns.get_loc('2005')
b = df.columns.get_loc('2010')
c = df.columns.get_loc('2015')
df.iloc[:,np.r_[a-1:b,c-1:len(df.columns)]]
例子:
df = pd.DataFrame(columns=list('ab') +
[*map(str,pd.date_range('2000','2021',freq='y').year)])
print(df)
Empty DataFrame
Columns: [a, b, 2000, 2001, 2002, 2003, 2004, 2005,
2006, 2007, 2008, 2009, 2010, 2011, 2012,
2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020]
Index: []
print(df.iloc[:,np.r_[a-1:b,c-1:len(df.columns)]])
Empty DataFrame
Columns: [2005, 2006, 2007, 2008, 2009, 2010, 2015, 2016, 2017, 2018, 2019, 2020]
Index: []
推荐阅读
- version-control - 从错误的父级创建了一个命名分支
- c++ - 注释中的三元组,在 c++11 中转换,在 c++17 中被忽略
- google-maps - Google Maps API,获取搜索结果的边界
- postgresql - Postgresql 表/视图的本地缓存
- go - 两者中哪一个是惯用的方式?time.Sleep() 还是ticker?
- docker - 使用 Docker 的动态 Nginx 代理
- php - Preg 替换,不替换任何 div 标签
- microsoft-graph-api - 无法使用 microsoft graph API 为 excel 文件创建编辑链接
- python - 可以从 tensorflow.python.keras 导入元素,但不能将模块作为一个整体
- javascript - Javascript无法在移动浏览器上获取热点局域网IP地址?