Преобразовать столбец целых чисел в пандас-фрейме в месяц с ведущими нулями - PullRequest
0 голосов
/ 06 июля 2019

Я хочу изменить столбец «Месяц и день» в кадре данных панд Python с целого числа на строки с ведущими нулями.

То, что я хочу, здесь: вход здесь представлен в виде кадра данных панд:

Year Month  Day
2018     1    1
2018     1   12
2018     1   18
2018     2    4
2018     2    1
2018     2    2
2018     2   12
2018     3   30

Я хочу сделать их такими:

Year Month  Day
2018    01   01
2018    01   12
2018    01   18
2018    02   04
2018    02   01
2018    02   02
2018    02   12
2018    03   30

Мой метод довольно тупой и очень медленный.

def Import():
    df = pd.read_csv('Transaction_data.csv',index_col=0)
    n = len(df)
    for i in range(n):
        temp = df['Year'].loc[i]
        df['Year'].loc[i] = str(temp)

    for i in range(n):
        temp = df['Month'].loc[i]
        if temp<10:
            df['Month'].loc[i] = '0'+str(temp)
        else:
            df['Month'].loc[i] = str(temp)

    for i in range(n):
        temp = df['Day'].loc[i]
        if temp<10:
            df['Day'].loc[i] = '0'+str(temp)
        else:
            df['Day'].loc[i] = str(temp)
    return df

Также

pd.to_datetime(df['Month'],format='%d')

не поможет, так как to_datetime имеет только целые числа месяца [1,12]

Ответы [ 2 ]

4 голосов
/ 06 июля 2019

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

Использовать series.str.zfill():

df[['Month','Day']]=df[['Month','Day']].astype(str).apply(lambda x: x.str.zfill(2))
print(df)

   Year Month Day
0  2018    01  01
1  2018    01  12
2  2018    01  18
3  2018    02  04
4  2018    02  01
5  2018    02  02
6  2018    02  12
7  2018    03  30
1 голос
/ 06 июля 2019

Вы упомянули, что хотите иметь строковое значение, чтобы вы могли использовать простую лямбду.На примере Day вы должны иметь:

df['Day'].apply(lambda x: "0"+str(x) if x<10 else x)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...