конкатенация нового столбца и его переименование - PullRequest
0 голосов
/ 24 ноября 2018

Я пытаюсь сгенерировать новый столбец на основе другого (столбец часа из столбца времени).Проблема в том, что после объединения он получает одно и то же имя («время»).Более того, когда я пытаюсь изменить один, другой тоже меняется.

Почему это так?

Вот код

df['time'] = pd.to_datetime(df['time'])
hour_col = pd.Series(df['time']).copy()
hour_col = hour_col.apply(lambda t: t.hour)
df = pd.concat([df, hour_col], axis=1)

Изменение имени:

df = df.rename(columns={ df.columns[3]: "hour" })

1 Ответ

0 голосов
/ 24 ноября 2018

Используйте dt.hour:

df['time'] = pd.to_datetime(df['time'])
df['hours'] = df['time'].dt.hour

Но если вам действительно нужно только ваше решение rename column, преобразование в Series не требуется, посколькукаждый столбец DataFrame равен Series после выбора (print (type(df['time']))):

df = pd.DataFrame({'time':['10:20:30','20:03:04']})

df['time'] = pd.to_datetime(df['time'])
hour_col = df['time'].rename('hour')
hour_col = hour_col.apply(lambda t: t.hour)
df = pd.concat([df, hour_col], axis=1)
print (df)
                 time  hour
0 2018-11-24 10:20:30    10
1 2018-11-24 20:03:04    20

Если хотите заменить столбцы позицией (например, из-за дублированных значений и rename измените оба имени, как упомянуто @Gla Avineri в комментарии) использовать:

df = pd.DataFrame({'time':['10:20:30','20:03:04'],
                   'a':[2,3],
                   'b':[-4,5]})

df['time'] = pd.to_datetime(df['time'])
hour_col = df['time']
hour_col = hour_col.apply(lambda t: t.hour)
df = pd.concat([df, hour_col], axis=1)

#converting to list because columns are immutable
cols = df.columns.tolist()
#set 4th value
cols[3] = 'hour'
#assign back
df.columns = cols

print (df)
                 time  a  b  hour
0 2018-11-24 10:20:30  2 -4    10
1 2018-11-24 20:03:04  3  5    20
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...