【问题标题】: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
      

      【讨论】:

        猜你喜欢
        • 2021-09-07
        • 2022-07-01
        • 1970-01-01
        • 2018-09-24
        • 2018-08-01
        • 1970-01-01
        • 2017-09-09
        • 2011-10-20
        相关资源
        最近更新 更多