Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将列列表解析为数据帧以仅显示这些列_Python_Pandas - Fatal编程技术网

Python 将列列表解析为数据帧以仅显示这些列

Python 将列列表解析为数据帧以仅显示这些列,python,pandas,Python,Pandas,我知道,如果您有一个数据帧(df),您可以使用df.columns.values获取列以返回对象(不确定是哪种类型),但您可以将其转换为字符串 如果我的dataframe有10列,并且我知道前三列的名称,那么我可以创建一个字符串,并将其解析到dataframe以仅显示这些列吗 subset_columns['one','two','three'] df[[subset_colimns]] 您可以通过强制转换或使用numpytolist()函数将列转换为列表。然后,您可以通过正常方式进行切片来选

我知道,如果您有一个数据帧(df),您可以使用df.columns.values获取列以返回对象(不确定是哪种类型),但您可以将其转换为字符串

如果我的dataframe有10列,并且我知道前三列的名称,那么我可以创建一个字符串,并将其解析到dataframe以仅显示这些列吗

subset_columns['one','two','three']
df[[subset_colimns]]

您可以通过强制转换或使用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]

是,您可以选择所需的列

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

你能从你的清单上切下i-j,说我想要前四个,然后跳过下两个,再给我三个吗?所以a,b,c,d,g,h?@Yoshisery不简洁地说,你必须做一些类似于
part1=cols[0:3],part2=cols[6:8],subcols=part1+part2,df[subcols]
的事情,因为某种原因,当我这样做时(解析列的子集),它将索引和第一列“加载年”组合在一起,我怎样才能阻止这种情况发生?@yoshiserry:这不应该发生。你能不能再发一个问题,包括再现错误的代码和数据,我可以看一下
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 = ['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