Два столбца, связанных друг с другом при переименовании в фрейме данных Pandas - PullRequest
0 голосов
/ 20 июня 2019

У меня проблема с тем, что два столбца моего информационного кадра связаны между собой.Мне нужно указать второй столбец, который будет переименован в «Проект» по индексу (в приведенном ниже коде), поскольку у него нет заголовка столбца, но для некоторых файлов он, как представляется, также приводит к тому, что следующий столбец без заголовка также будет переименован в «Проект»,Когда я пытаюсь удалить этот столбец по индексу в результирующем наборе данных, оба столбца в наборе данных удаляются.

df = df.rename (columns = {df.columns [2]: «Проект»}

Похоже, это делается для некоторых файлов данных, которые у меня естьно не другие, поэтому неясно, где проблема или это связано с моим кодом ниже.

Набор данных будет выглядеть примерно так:

Classification | Category | Project.... | MTD Budget | Проект

dfs=[]

for i in range(12):
    print (i)
    df = pd.read_excel(files[i],sheet_name = sheet,header = None, usecols=range(1,16))

for row in range(df.shape[0]): 

    for col in range(df.shape[1]):

        if df.iat[row,col] == 'Classification':
            row_start = row
            break
df = df.loc[row_start:]

new_header = df.iloc[0] #grab the first row for the header
df = df[1:] #take the data less the header row
df.columns = new_header #set the header row as the df header

df['Region'] = sheet
df['File'] = files[i].rsplit('/',1)[1]
df['Period'] = files[i].rsplit('Overview - ',1)[1][:-5]


df = df.dropna(axis='columns',how='all')
df = df.dropna(axis='index',how='all')

df = df.rename(columns={df.columns[2]: "Project"})
df = df.loc[:, df.columns.notnull()]

df['Classification'] = df['Classification'].fillna(method='ffill')
df['Category'] = df['Category'].fillna(method='ffill')

dfs.append(df)

1 Ответ

0 голосов
/ 20 июня 2019

IIUC, этот хак будет делать:

col_to_change = 2
df.columns = (list(df.columns[:col_to_change]) +
              ['Project'] + 
              list(df.columns[col_to_change+1:]
             )

Или:

df.columns = [col if i!=col_to_change else 'Project' 
                  for i,col in enumerate(df.columns.to_list()) ]
...