删除数据框标题结尾处的“ \ xa0”标签

时间:2019-05-02 12:08:55

标签: python python-3.x

我有一个数据集,其中包含一些标头,这些标头以不带空格的十六进制代码结尾。下面是我尝试摆脱的尝试,但仍然存在。

输入:

files=[file1,file2,file3]
for f in files:
    for col in f.columns:
        col = col.replace("\xc2\xa0", "")
        col = col.replace(u'\xa0', u' ')
    print(f.columns.values)

输出:

'Name' 'Date' 'rep_cur' 'Passenger Revenue\xa0' 'Cargo Revenue\xa0'
 'Other Revenue\xa0' 'Total Cargo & Other Revenue' 'Total Revenue\xa0'
 '% inc / (dec) to previous period' 'Employee Costs\xa0' 'Fuel and oil\xa0'

2 个答案:

答案 0 :(得分:0)

使用str.strip

l = ['Name','Date','rep_cur','Passenger Revenue\xa0','Cargo Revenue\xa0',
 'Other Revenue\xa0','Total Cargo & Other Revenue','Total Revenue\xa0',
 '% inc / (dec) to previous period','Employee Costs\xa0','Fuel and oil\xa0']
new_l = [i.strip() for i in l]

输出:

['Name',
 'Date',
 'rep_cur',
 'Passenger Revenue',
 'Cargo Revenue',
 'Other Revenue',
 'Total Cargo & Other Revenue',
 'Total Revenue',
 '% inc / (dec) to previous period',
 'Employee Costs',
 'Fuel and oil']

答案 1 :(得分:0)

for col in f.columns:
    col = col.replace("\xc2\xa0", "")
    col = col.replace(u'\xa0', u' ')

这对迭代所用的实际col无效。那几乎等于:

li = [1, 2, 3]
for n in li:
    n = n + 1
print(li)
# [1, 2, 3]

一个不错的IDE应该按照“ n(在您的示例中为col)被重新定义而没有使用”的行显示警告。

相反,您应该使用熊猫提供的工具,例如df.rename

df = pd.DataFrame({'a\xa0': []})

print(df.rename(lambda col: col.replace('\xa0', ''), axis='columns'))

请注意,.rename返回一个新的数据帧。您可以使用inplace=True更改原始数据框:

df.rename(lambda col: col.replace('\xa0', ''), axis='columns', inplace=True)

如果您不想那么花哨,可以自己替换列的名称(这类似于您的原始代码尝试执行的操作):

df.columns = [column.replace('\xa0', '') for col in df.columns]