Объединение столбцов для создания даты с заголовком - PullRequest
0 голосов
/ 02 октября 2018

Я использую большой климатический файл, в котором есть столбцы YYYY, MM, DD.Я хочу объединить их, чтобы создать столбец даты, сохраняя при этом все исходные данные в наборе данных.

Мне удалось сделать это до сих пор, что дает мне почти то, что я хочу, но я не могу получить заголовок в столбце даты.

climate = pd.read_csv(r'R:\Climate\SILO\PatchedPoint\Current_csv\86090.csv')

climate.apply(pd.to_numeric, errors = 'ignore')
climate_nozero = climate.drop([0])

climate2 = climate_nozero.rename(columns = {'YYYY':'Year','MM':'Month','DD':'Day'})

index = climate2.apply(lambda x: pd.datetime.strptime("{0} {1} {2}".format(x['Year'],x['Month'], x['Day']), "%Y %m %d"),axis=1) 

climate3 = pd.concat([index, climate2], axis=1)

Я пытался

climate4 = climate3.rename(columns = {'0':'Date'})

изменить заголовок, но он ничего не делает

Я добавил выходную таблицу, которую получаю

Ответы [ 3 ]

0 голосов
/ 02 октября 2018

Предполагая, что ваши столбцы даты являются строками, вы можете использовать assign() с to_datetime() следующим образом:

df.assign(date = pd.to_datetime(df['YYYY'] + "-" + df['MM'] + "-" + df['DD']))

   YYYY  MM DD  foo       date
0  2010   5  1    0 2010-05-01
1  2012  10  2    1 2012-10-02
2  2015  12  3    2 2015-12-03

Данные:

data = {"YYYY": ["2010", "2012", "2015"], 
        "MM": ["5", "10", "12"], 
        "DD": ["1", "2", "3"],
        "foo": range(3)}

df = pd.DataFrame(data)
0 голосов
/ 02 октября 2018

Используйте to_datetime, но необходимо переименовать столбцы:

data = {"YYYY": ["2010", "2012", "2015"], 
        "MM": ["5", "10", "12"], 
        "DD": ["1", "2", "3"],
        "foo": range(3)}

climate_nozero = pd.DataFrame(data)

climate2 = climate_nozero.rename(columns = {'YYYY':'Year','MM':'Month','DD':'Day'})

climate2.index = pd.to_datetime(climate2[['Year','Month','Day']])
print (climate2)
            Year Month Day  foo
2010-05-01  2010     5   1    0
2012-10-02  2012    10   2    1
2015-12-03  2015    12   3    2

И затем, если хотите удалить столбцы:

climate2 = climate2.drop(['Year','Month','Day'], axis=1)
print (climate2)
            foo
2010-05-01    0
2012-10-02    1
2015-12-03    2

Если хотите столбец даты и времени:

climate2['date'] = pd.to_datetime(climate2[['Year','Month','Day']])
print (climate2)
   Year Month Day  foo       date
0  2010     5   1    0 2010-05-01
1  2012    10   2    1 2012-10-02
2  2015    12   3    2 2015-12-03
0 голосов
/ 02 октября 2018

concat и rename. Я бы порекомендовал напрямую назначить столбец именованному полю в вашем фрейме данных.Я думаю, что ниже должны работать в качестве замены для ваших нижних двух строк:

climate2["Date"] = climate2.apply(lambda x: pd.datetime.strptime("{0} {1} {2}".format(x['Year'],x['Month'], x['Day']), "%Y %m %d"),axis=1) 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...