从pandas数据帧中提取列而不进行硬编码

时间:2018-05-07 05:31:19

标签: python pandas

有没有办法从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)

2 个答案:

答案 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