解析列列表到pandas DataFrame以仅显示这些列

-1 投票
2 回答
1166 浏览
提问于 2025-04-17 22:12

我知道在使用pandas的时候,如果你有一个数据框(df),你可以通过df.columns.values来获取列名,这会返回一个对象(我不太确定是什么类型),但你可以把它转换成字符串。

如果我的数据框有10列,而我知道前面三列的名字,我能不能创建一个字符串,然后把它解析到数据框中,只显示那些列呢?

subset_columns['one','two','three']
df[[subset_colimns]]
df OUT >>
one | two | three
1345 415    1654
13445 56576  76r76

2 个回答

0

是的,你可以选择需要的列。

df = pd.read_csv("../SO/data.csv")
df.head()
    card_number effective_date  expiry_date grouping_name   Ac. Year code
0    1206090     28 Sep 2012     21 Aug 2013     Dummy no.1  201213
1    1206090     21 Feb 2013     21 Aug 2013     Dummy no.2  201213
2    1206090     28 Sep 2012     30 Nov 2012     Dummy no.3  201213
3    1206090     03 Dec 2012     21 Aug 2013     Dummy no.3  201213
4    1206090     23 Apr 2013     31 Aug 2013     Dummy no.4  201213

req_cols 是下面需要的列的列表:

req_cols = ['card_number', 'expiry_date', 'grouping_name']
df[req_cols].head()

    card_number expiry_date grouping_name
0    1206090     21 Aug 2013     Dummy no.1
1    1206090     21 Aug 2013     Dummy no.2
2    1206090     30 Nov 2012     Dummy no.3
3    1206090     21 Aug 2013     Dummy no.3
4    1206090     31 Aug 2013     Dummy no.4
1

你可以通过转换或者使用numpy的tolist()函数把列转换成一个列表。然后你可以像平常一样通过切片来选择其中的内容:

In [5]:
import pandas as pd
df = pd.DataFrame(dict(zip(list('abcdefghij'), [arange(10)] * 10)))
cols = df.columns.values.tolist()
# you can also do list(df.columns)

In [11]:
cols

Out[11]:
['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']

In [12]:
subcols = cols[2:5]
df[subcols]

Out[12]:
   c  d  e
0  0  0  0
1  1  1  1
2  2  2  2
3  3  3  3
4  4  4  4
5  5  5  5
6  6  6  6
7  7  7  7
8  8  8  8
9  9  9  9

[10 rows x 3 columns]

如果你想选择多个不连续的列,可以这样做:

In [36]
part1 = cols[0:3]
part2 = cols[6:8]
subcols = part1+part2
df[subcols]

Out[36]:

   a  b  c  g  h
0  0  0  0  0  0
1  1  1  1  1  1
2  2  2  2  2  2
3  3  3  3  3  3
4  4  4  4  4  4
5  5  5  5  5  5
6  6  6  6  6  6
7  7  7  7  7  7
8  8  8  8  8  8
9  9  9  9  9  9

[10 rows x 5 columns]

撰写回答