Переименование нескольких столбцов в датафрейме - PullRequest
0 голосов
/ 16 мая 2018

У меня большой массив данных как:

z1.ix[1:2]
                  index  LocalTime   Temp   TempDiff   TempNormal   DewPoint  
1  5/16/2018 1:00:00 AM      66.92  -3.89      55.22        66.92        NaN   
2  5/16/2018 2:00:00 AM      66.92  -3.31      53.47        66.02        NaN

Выше было сгенерировано с использованием pandas.read_csv

Как переименовать столбцы, чтобы они выглядели следующим образом:

z1.ix[1:2]
                 LocalTime   Temp   TempDiff   TempNormal   DewPoint  
1  5/16/2018 1:00:00 AM      66.92  -3.89      55.22        66.92            
2  5/16/2018 2:00:00 AM      66.92  -3.31      53.47        66.02        

Где имя столбца было смещено влево на одно место, а последний столбец удален.

df.rename(columns={'oldCol':'newCol'})

- утомительный метод переименования столбцов, поскольку число столбцов для z1 составляет около 300.

Edit: Мой CSV-файл имеет:

NA-KBWI      Hourly Forecast Made May 16 2018 1510 UTC                  
LocalTime    Temp    TempDiff    TempNormal  DewPoint    Cloud Cover     FeelsLikeTemp
5/16/2018 0:00  68  -3.38   57.5    66.92   100 68
5/16/2018 1:00  66.92   -3.89   55.22   66.92   100 66.92
5/16/2018 2:00  66.92   -3.31   53.47   66.02   100 66.92
5/16/2018 3:00  66.92   -2.37   52.88   66.02   100 66.92

Я использую следующий код:

pandas.read_csv('myCSV.csv', skiprows=[0])

Ответы [ 5 ]

0 голосов
/ 16 мая 2018

из того, что я понял, вы пытаетесь сместить все имена столбцов вниз.

rename_dict = {}
for i in range(len(z1.keys()) - 1):
    rename_dict[z1.keys()[i]] = z1.keys()[i+1]

z1.index.names = [z1.keys()[0]]
z1 = z1.drop(df.keys()[-1], axis=1)
print(rename_dict)
z1.rename(columns=rename_dict)

это должно сработать

0 голосов
/ 16 мая 2018

А как же

df.drop('DewPoint', axis=1)
  .rename(columns=dict(zip(df.columns[:-1],df.columns[1:])))
0 голосов
/ 16 мая 2018

Рассмотрим код ниже:

new_col = list(pd.Series(list(df.columns)).shift(-1).dropna())
df = df.drop(list(df.columns)[-1], axis=1)
df.columns = new_col
0 голосов
/ 16 мая 2018

Проще использовать флаг index_col = False в вашей команде read_csv , и вам следует избегать этой проблемы с самого начала.

В противном случае вы можете сделать что-то вроде:

old_cols = df.columns.values
#delete the right-most row, which for you is NaN
del df[old_cols[-1]]
new_cols = old_cols[1:]
df.columns = new_cols
0 голосов
/ 16 мая 2018

Вы можете сделать это:

df.columns = df.columns[1:].tolist() + ['DropMe']

df.drop('DropMe', axis=1, inplace=True)

Вывод:

                   Temp  TempDiff  TempNormal  DewPoint
1  5/16/2018 1:00:00 AM     66.92       -3.89     55.22
2  5/16/2018 2:00:00 AM     66.92       -3.31     53.47
...