как заменить строку по определенному индексу в панде - PullRequest
0 голосов
/ 02 октября 2018

У меня есть следующий фрейм данных в пандах

    code     bucket
    0        08:30:00-9:00:00
    1        10:00:00-11:00:00
    2        12:00:00-13:00:00

Я хочу заменить 7-й символ 0 на 1, мой желаемый фрейм данных -

   code     bucket
    0       08:30:01-9:00:00
    1       10:00:01-11:00:00
    2       12:00:01-13:00:00

Как это сделать впанды?

Ответы [ 2 ]

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

По возможности избегайте строковых операций

Вы теряете значительную часть функциональности, работая только со строками.Хотя это может быть разовая операция, вы обнаружите, что многократные манипуляции со строками быстро станут дорогостоящими с точки зрения времени и эффективности памяти.

Используйте pd.to_datetime вместо

Вы можете добавить дополнительныеряд к вашему датафрейму с datetime объектами.Ниже приведен пример, который, кроме того, создает серию object dtype в желаемом формате.

# split by '-' into 2 series
dfs = df.pop('bucket').str.split('-', expand=True)

# convert to datetime
dfs = dfs.apply(pd.to_datetime, axis=1)

# add 1s to first series
dfs[0] = dfs[0] + pd.Timedelta(seconds=1)

# create object series from 2 times
form = '%H:%M:%S'
dfs[2] = dfs[0].dt.strftime(form) + '-' + dfs[1].dt.strftime(form)

# join to original dataframe
res = df.join(dfs)

print(res)

   code                   0                   1                  2
0     0 2018-10-02 08:30:01 2018-10-02 09:00:00  08:30:01-09:00:00
1     1 2018-10-02 10:00:01 2018-10-02 11:00:00  10:00:01-11:00:00
2     2 2018-10-02 12:00:01 2018-10-02 13:00:00  12:00:01-13:00:00
0 голосов
/ 02 октября 2018

Используйте индексирование с str:

df['bucket'] = df['bucket'].str[:7] + '1' + df['bucket'].str[8:]

Или list comprehension:

df['bucket'] = [x[:7] + '1' + x[8:] for x in df['bucket']]

print (df)
   code             bucket
0     0   08:30:01-9:00:00
1     1  10:00:01-11:00:00
2     2  12:00:01-13:00:00
...