【问题标题】:how to replace string at specific index in pandas dataframe如何替换熊猫数据框中特定索引处的字符串
【发布时间】:2019-03-07 15:41:31
【问题描述】:
我在熊猫中有以下数据框
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
如何在熊猫中做到这一点?
【问题讨论】:
标签:
python
pandas
datetime
series
【解决方案1】:
通过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
【解决方案2】:
尽可能避免字符串操作
仅使用字符串会丢失大量功能。虽然这可能是一次性操作,但您会发现重复的字符串操作很快就会在时间和内存效率方面变得昂贵。
改用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