如果名称是空字符串,如何重命名Pandas DataFrame列?

时间:2017-06-13 17:14:01

标签: python pandas dataframe

我已经使用pandas从Basketball Reference导入了一个HTML表格,但是我在尝试重命名一些列为空名字符串的列时遇到了烦恼。

这是拉桌子的代码:

tables = pd.read_html('http://www.basketball-reference.com/leagues/NBA_2016_games.html')
games = tables[0]

列看起来像这样:

Out[138]: 

Index([u'Date', u'Start (ET)', u'Visitor/Neutral', u'PTS', u'Home/Neutral',
       u'PTS.1', u' ', u' .1', u'Notes'],
       dtype='object')

重命名除u' 'u' .1'列之外的所有内容都没有问题,但我找不到使用标签方法重命名空列的正确方法。

我默认尝试了这个(仅限于在这里重命名几列):

column_names = {'Date': 'date', ' ': 'box', ' .1': 'overtime'}
games.rename(columns = column_names)

但这会使' '' .1'列保持不变。

此方法有效:

column_names = {games.columns[6]: 'box', games.columns[7]: 'overtime'}

但是有没有办法在没有明确引用位置的情况下更改这些名称?

2 个答案:

答案 0 :(得分:0)

也许这可能是一个快速修复 - 明确设置列名称。

df.columns = [u'Date', u'Start (ET)', u'Visitor/Neutral', u'PTS', u'Home/Neutral', u'PTS.1', u'Rename1', u'Rename2', u'Notes']

答案 1 :(得分:0)

对我来说,工作添加str.strip以删除尾随空格,也是必要的更改dict值(删除空格):

column_names = {'Date': 'date', '': 'box', '.1': 'overtime'}
games.columns = games.columns.str.strip()
games = games.rename(columns = column_names)
print (games.columns)
Index(['date', 'Start (ET)', 'Visitor/Neutral', 'PTS', 'Home/Neutral', 'PTS.1',
       'box', 'overtime', 'Notes'],
      dtype='object')

另一个解决方案是将列名称导出到list,并且\xaNO-BREAK SPACE):

print (games.columns.tolist())
['Date', 'Start (ET)', 'Visitor/Neutral', 'PTS', 'Home/Neutral', 
 'PTS.1', '\xa0', '\xa0.1', 'Notes']


column_names = {'Date': 'date', '\xa0': 'box', '\xa0.1': 'overtime'}
games = games.rename(columns = column_names)
print (games.columns)
Index(['date', 'Start (ET)', 'Visitor/Neutral', 'PTS', 'Home/Neutral', 'PTS.1',
       'box', 'overtime', 'Notes'],
      dtype='object')