64

如果我导入或创建一个不包含空格的 pandas 列,我可以这样访问它:

from pandas import DataFrame

df1 = DataFrame({'key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'],
                 'data1': range(7)})

df1.data1

这将为我返回该系列。但是,如果该列的名称中有空格,则无法通过该方法访问它:

from pandas import DataFrame

df2 = DataFrame({'key': ['a','b','d'],
                 'data 2': range(3)})

df2.data 2      # <--- not the droid I'm looking for.

我知道我可以使用 .xs() 访问它:

df2.xs('data 2', axis=1)

一定有别的办法。我疯狂地用谷歌搜索它,想不出任何其他方法来搜索它。我已经阅读了 SO 上包含“column”、“string”和“pandas”的所有 96 个条目,但找不到以前的答案。这是唯一的方法,还是有更好的方法?

4

6 回答 6

74

旧帖子,但可能很有趣:一个想法(这是破坏性的,但如果你想要它快速而肮脏的话就可以完成这项工作)是使用下划线重命名列:

df1.columns = [c.replace(' ', '_') for c in df1.columns]
于 2015-05-28T18:42:30.483 回答
62

我认为默认方法使用括号方法而不是点表示法。

import pandas as pd

df1 = pd.DataFrame({
    'key': ['b', 'b', 'a', 'c', 'a', 'a', 'b'],
    'dat a1': range(7)
})

df1['dat a1']

其他方法,例如将其作为属性公开,更多的是为了方便。

于 2012-12-07T07:36:50.637 回答
10

如果您想为 pandas 方法(如分配)提供间隔列名称,您可以对输入进行字典化。

df.assign(**{'space column': (lambda x: x['space column2'])})
于 2020-05-14T08:45:03.930 回答
2

虽然在使用字典或 []-selection 时接受的答案适用于列规范,但它并不能推广到需要引用列的其他情况,例如assign方法:

> df.assign("data 2" = lambda x: x.sum(axis=1)
SyntaxError: keyword can't be an expression
于 2019-03-15T13:27:27.897 回答
0

如果要应用过滤,也可以使用包含空格的列名,例如过滤 NULL 值或空字符串:

df_package[(df_package['Country_Region Code'].notnull()) | 
(df_package['Country_Region Code'] != u'')]

多亏了Rutger Kassies 的 回答,我才知道。

于 2019-12-11T13:51:29.420 回答
0

你可以这样做df['Column Name']

于 2022-02-11T18:56:49.743 回答