【问题标题】:Python Replacing Columns getting IndexError: index 8 is out of bounds for axis 0 with size 8Python替换列得到IndexError:索引8超出轴0的范围,大小为8
【发布时间】:2020-09-03 15:25:15
【问题描述】:

不确定我在这里做错了什么,但我想用 column_names 列表中的相应名称替换初始列名。

column_names = ['FIPS','Admin2','Province_State','Country_Region','Last_Update','Lat','Long_','Confirmed','Deaths','Recovered','Active','Combined_Key']
df.columns = ['Province/State', 'Country/Region', 'Last Update', 'Confirmed',
       'Deaths', 'Recovered', 'Latitude', 'Longitude']

def replace_cols(df, new_columns):
    k = 0
    for i in df.columns:
        for j in column_names:
            seq = difflib.SequenceMatcher(None,i, j).ratio()*100
            if seq >= 50:
                newcol = re.sub(i, j, i)
                df.columns.values[k] = newcol
                print(newcol)
                k += 1

【问题讨论】:

  • 你也可以发布 df.head() 吗?
  • 问题是逻辑不起作用。您计算两列之间的差异,对于纬度,它出错了。 Latitude 和 Last_Update 之间的差异大于 50(k 的增量)并继续 for 循环,Latitude 和 Lat 之间的差异大于 50,k 再次增加。条件seq >= 50 有风险。

标签: python replace index-error


【解决方案1】:

这是因为 Lat/Last_update 都改变了 Latitude 的值(相似度超过 50%),所以在最后一个循环中,您的代码首先替换 Last_update,然后用 latitude 替换 Lat,然后超出 df 的长度。

【讨论】:

    【解决方案2】:

    将阈值从 50 提高到 54 有效:

    import re
    
    column_names = ['FIPS','Admin2','Province_State','Country_Region','Last_Update','Lat','Long_','Confirmed','Deaths','Recovered','Active','Combined_Key']
    # df.columns = ['Province/State', 'Country/Region', 'Last Update', 'Confirmed','Deaths', 'Recovered', 'Latitude', 'Longitude']
    cols = ['Province/State', 'Country/Region', 'Last Update', 'Confirmed','Deaths', 'Recovered', 'Latitude', 'Longitude']
    df = pd.DataFrame([], columns=cols)
    
    
    def replace_columns(df, new_columns):
        k = 0
        for i in df.columns:
            print('Old col', i, k)
            for j in column_names:
                seq = difflib.SequenceMatcher(None,i, j).ratio()*100
                if seq >= 54:
                    newcol = re.sub(i, j, i)
                    print('Newcol ', newcol)
                    df.columns.values[k] = newcol
                    k += 1
        return df
    

    【讨论】:

      猜你喜欢
      • 2019-07-30
      • 1970-01-01
      • 2021-07-17
      • 1970-01-01
      • 1970-01-01
      • 2017-02-16
      • 2019-08-26
      • 2021-11-18
      • 1970-01-01
      相关资源
      最近更新 更多