如何在pandas数据框上显示所有列名称?


127

我有一个包含数百列的数据框,我需要查看所有列名称。

我做了什么:

In[37]:
data_all2.columns

输出为:

Out[37]:
Index(['customer_id', 'incoming', 'outgoing', 'awan', 'bank', 'family', 'food',
       'government', 'internet', 'isipulsa',
       ...
       'overdue_3months_feature78', 'overdue_3months_feature79',
       'overdue_3months_feature80', 'overdue_3months_feature81',
       'overdue_3months_feature82', 'overdue_3months_feature83',
       'overdue_3months_feature84', 'overdue_3months_feature85',
       'overdue_3months_feature86', 'loan_overdue_3months_total_y'],
      dtype='object', length=102)

如何显示所有列,而不是截断的列表?

Answers:


194

您可以全局设置打印选项。我认为这应该工作:

方法1:

pd.set_option('display.max_columns', None)
pd.set_option('display.max_rows', None)

方法2:

pd.options.display.max_columns = None
pd.options.display.max_rows = None

这样您就可以在执行操作时查看所有列名称和行.head()。列名都不会被截断。


如果只想查看列名,可以执行以下操作:

print(df.columns.tolist())

3
@EEE不,它确实回答了问题。我刚试过,它显示所有列而不是截断的列表。他没有说截断的字段,而是说栏目列表。
rjurney19年

3
啊,你是对的。我错了。谢谢,@ rjurney。抱歉,YOLO。我正在做df.columns而不是df.head()!我应该删除不正确的先前评论吗?
EEE

是的,我是这样认为的。
rjurney19年

1
这是更好的设置像500的有限值,否则,如果你打印一个大的数据帧,将采取永远运行
托马斯G.

抱歉,如何关闭它?目前,我愚蠢的解决方案只是关闭Anaconda并重新打开它。好吧,是否有这样做的合法性?
陈立子

44

df_data在此示例中,要获取DataFrame的所有列名称,只需使用命令df_data.columns.values。这将显示一个列表,其中包含数据框的所有列名称

码:

df_data=pd.read_csv('../input/data.csv')
print(df_data.columns.values)

输出:

['PassengerId' 'Survived' 'Pclass' 'Name' 'Sex' 'Age' 'SibSp' 'Parch' 'Ticket' 'Fare' 'Cabin' 'Embarked']

这是真正的回答这个问题,谢谢@ pink.slash
Interlooper

如果我也想查看列号-可以吗?我的df有200列,我想只使用其中的一小部分,并认为我可以使用数字而不是写每个列的名称。
Mactilda

10

在交互式控制台中,很容易做到:

data_all2.columns.tolist()

或者在脚本中这样:

print(data_all2.columns.tolist())

6

这将达到目的。请注意使用display()代替打印。

with pd.option_context('display.max_rows', 5, 'display.max_columns', None): 
    display(my_df)

编辑:

display需要使用,因为pd.option_context设置仅适用于display而不适用于print


我喜欢with关键字仅将选项应用于下面的块。但是,它可以很好地配合使用print()。为什么我需要使用display()代替print()
Vincent Agami

@VincentAgami需要使用显示,因为pd.option_context设置仅适用于显示而不适用于打印。我已经更新了答案以包含此信息。
nico

3

对我有用的是:

pd.options.display.max_seq_items = None

您还可以将其设置为大于列数的整数。


3

我找到的最简单的方法就是

list(df.columns)

就我个人而言,我不想更改全局变量,不是经常要查看所有列名称。


2

要获取所有列名,您可以遍历data_all2.columns

columns = data_all2.columns
for col in columns:
    print col

您将获得所有列名称。或者,您可以将所有列名称存储到另一个列表变量,然后打印列表。


1

如果您只想查看所有列,则可以进行此类操作以快速解决

cols = data_all2.columns

现在,cols将表现为可索引的迭代变量。例如

cols[11:20]

1

一种快速而肮脏的解决方案是将其转换为字符串

print('\t'.join(data_all2.columns))

会使所有标签都被打印出来,并用制表符分隔



1

你可以试试这个

pd.pandas.set_option('display.max_columns', None)

1

这不是常规的答案,但是我想您可以转置数据框以查看行而不是列。我之所以使用它,是因为我发现行比列更“国际化”:

data_all2.T

这应该让您查看所有行。此操作不是永久性的,它只允许您查看数据框的转置版本。

如果行仍被截断,则使用print(data_all2.T)来查看所有内容。


这不是常规的答案,但是我想您可以转置数据框以查看行而不是列。他们想要的只是列名,不是吗?如果行仍被截断,只需使用print(data_all2.T)查看所有内容。打印结果如何解决问题?反正还没有打印吗?
AMC

0

这是我的方式。我从来没有尝试过一百列。但我认为这可行

your_dataframe.info()

0

我知道这是重复,但是我总是最终复制并修改YOLO的答案:

pd.set_option('display.max_columns', 500)
pd.set_option('display.max_rows', 500)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.