Pandas列访问w /列名称包含空格

时间:2012-12-07 04:49:28

标签: string pandas

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

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

df1.data1

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

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)

是另一种方式。我用谷歌搜索它疯了,想不出任何其他方式谷歌它。我在这里阅读了包含“column”,“string”和“pandas”的所有96条目,并且找不到以前的答案。这是唯一的方法,还是有更好的东西?

谢谢!

5 个答案:

答案 0 :(得分:38)

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

df1.columns = [c.replace(' ', '_') for c in df1.columns]

答案 1 :(得分:27)

我认为 默认方式是使用:

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

df1['dat a1']

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

答案 2 :(得分:5)

如果您希望为pandas方法(例如assign)提供间隔的列名,则可以将输入数字化。

df.assign(**{'space column': (lambda x: x['space column2'])})

答案 3 :(得分:0)

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

> df.assign("data 2" = lambda x: x.sum(axis=1)
SyntaxError: keyword can't be an expression

答案 4 :(得分:0)

如果您要应用过滤,则列名中也可以有空格,例如过滤NULL值或空字符串:

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

我很感谢Rutger Kassies answer