String 使用包含空格的列名访问列

String 使用包含空格的列名访问列,string,pandas,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':

如果导入或创建不包含空格的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.
一定有别的办法。我已经疯狂地用谷歌搜索过了,想不出其他方法来搜索它。我已经阅读了这里所有96个条目,其中包含“列”和“字符串”以及“熊猫”,并且找不到以前的答案。这是唯一的办法,还是有更好的办法

谢谢

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

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

df1['dat a1']

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

旧帖子,但可能很有趣:一个想法(这是破坏性的,但如果你想快速且不干净的话,它会起作用)是使用下划线重命名列:

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

虽然在使用字典或[]-选择时,公认的答案适用于列规范,但它不适用于需要参考列的其他情况,例如
赋值
方法:

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

如果要应用筛选,也可以使用带有空格的列名,例如筛选空值或空字符串:

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

如我所知,多亏了。

如果您想为诸如assign之类的方法提供间隔列名称,您可以对输入进行字典化

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

谢谢,那本不应该像它那样难倒我。谢谢你的评论。我通常使用点来访问我的列(df.col_name),但我只知道使用df[column name with space”].Thx访问带空格的列名的技巧。如果您还想将列标准化为小写,请使用
df1.columns=[c.lower()。将df1.columns中的c替换为('''''.''.'''''.'']
读取和清理数据帧的一个好方法是使用方法链接。您可以使用
rename
方法:
df1=pandas.dataframe({'key':['b','b','A','c','A','A','A','b','dat a1':range(7)})。重命名(lambda x:x.replace(''''u'),axis=1)
另一种方法是使用
strip()
函数:
df1.columns=[c.strip()表示df1.columns中的c]
你救了我一天!是的,我很想找到一个解决方案,因为据我所知,
assign
没有可链接的替代方案。我想这应该是一个单独的SO问题。答案是将字典作为关键字参数传递。
df.assign(**{“数据2”:lambda x:x.sum(axis=1)}
df.assign(**{'space column': (lambda x: x['space column2'])})