有没有办法从pandas数据框中提取列的子集而不指定所有列。例如我有与foll的数据框架。列:
str_ID, num_ID, 1990, 1991, 1992, 1993, 1994, 1995
我希望从1990
开始提取列。如果不进行硬编码,我该怎么做?
df.columns.values
array(['str_ID', 'num_ID', 1990, 1991, 1992, 1993, 1994, 1995], dtype=object)
答案 0 :(得分:2)
您可以对数据框的列使用条件理解(假设年份的列标题是整数):
df[sorted(col for col in df if isinstance(col, int) and col >= 1990)]
这会过滤大于或等于1990的整数列,并按排序顺序返回结果。
答案 1 :(得分:1)
如果标题是字符串并且在1900年之前没有年份,则另一个选项是:
df = pd.DataFrame({'str_ID':[4,2,4,5,5,4],
'num_ID': [4,2,4,5,5,4],
'1990':[4,3,1,2,2,4],
'1991':[1,2,4,5,5,3],
'1992':[4,3,2,2,2,4],
'1993':[4,3,2,2,2,4]})
print df
1990 1991 1992 1993 num_ID str_ID
0 4 1 4 4 4 4
1 3 2 3 3 2 2
2 1 4 2 2 4 4
3 2 5 2 2 5 5
4 2 5 2 2 5 5
5 4 3 4 4 4 4
columns = [x for x in df.columns if (x>=1990 and x.isdigit())]
df = df[columns]
print df
输出:
1990 1991 1992 1993
0 4 1 4 4
1 3 2 3 3
2 1 4 2 2
3 2 5 2 2
4 2 5 2 2
5 4 3 4 4