【问题标题】:Pandas: split cell and append data to another cell熊猫:拆分单元格并将数据附加到另一个单元格
【发布时间】:2019-08-05 17:34:31
【问题描述】:

好的,我正在尝试在 csv 中拆分一个单元格并获取信息的后半部分并将其附加到另一个单元格数据中。我可以拆分单元格,但随后我想要的数据就消失了。

此代码用于拆分单元格

import pandas as pd

data = pd.read_csv("/root/v-unit/calendar_data.csv")


data["Start"]= data["Start"].str.split("T",n =1, expand = True)
data["End"]= data["End"].str.split("T",n =1, expand = True)

print data
csvOut = "/root/v-unit/test-data.csv"
f=open(csvOut, 'a')
data[:65534].to_csv(f, index=False, header=True)

所以日期的格式是 2019-03-04T00:00:00 我在 T 处拆分列作为时间。然后我想获取时间戳并将其附加到包含任务的另一行,因此它将显示为:一个单元格中的一些任务 12:00 1:00 然后是其他单元格中的日期(当我运行上面的代码,但时间戳消失了,所以我不能合并它)

【问题讨论】:

    标签: python pandas csv merge split


    【解决方案1】:

    几乎和你做的一样,但是当你用扩展拆分时,它返回 2 列,所以你也需要有 2 列进行赋值(比如data[['StartDate', 'StartTime']] = ...):

    data = pd.DataFrame({'Start': ['2019-03-04T00:00:00'],
                         'End':   ['2019-03-04T10:00:00']})
    
    data[['Start', 'StartTime']] = data["Start"].str.split("T", n=1, expand = True)
    data[['End', 'EndTime']] = data["End"].str.split("T", n=1, expand = True)
    
    print(data)
    

    输出:

            Start         End StartTime   EndTime
    0  2019-03-04  2019-03-04  00:00:00  10:00:00
    

    注意:如果您只想在任务名称中添加开始时间和结束时间,您甚至不需要拆分日期。您可以改为使用pd.to_datetime 转换它们,然后使用strftime 格式化为'%H:%M'(对于hours:minutes):

    data = pd.DataFrame({'Task': 'task 1',
                         'Start': ['2019-03-04T00:00:00'],
                         'End':   ['2019-03-04T10:00:00']})
    
    data['Task'] += ' ' + \
        pd.to_datetime(data['Start']).dt.strftime('%H:%M').astype(str) + ' ' + \
        pd.to_datetime(data['End']).dt.strftime('%H:%M').astype(str)
    
    print(data)
    

    输出:

                     Task                Start                  End
    0  task 1 00:00 10:00  2019-03-04T00:00:00  2019-03-04T10:00:00
    

    【讨论】:

    • 抱歉打扰了 有没有办法设置时区?它显示为 UTC,一些用户不希望它作为输出。
    • 当然,最简单的方法是将“开始”和“结束”列从 UTC 转换为您的时区,例如 data['Start'] = pd.to_datetime(df['Start']).dt.tz_localize('UTC').dt.tz_convert('America/New_York')。参见例如stackoverflow.com/questions/42826388/… 了解更多信息
    • 这是假设您的日期是 UTC 并且您需要转换为您当地的时区。如果您的日期已经在您的时区并且您只需要显示它,那么您只需 tz_localize(... 它到您的时区,无需 tz_convert(... 它。希望有帮助
    • 啊,就是这样!再次感谢!你是救生员!
    【解决方案2】:

    您只需要选择第二列,并且可以像这样高效地这样做:

    import pandas as pd
    
    data = pd.DataFrame({'Start': ['2019-03-04T00:00:00'],
                         'End': ['2019-03-04T01:00:00']})
    
    data['Start'] = data['Start'].str.split('T').str[-1] 
    data['End'] = data['End'].str.split('T').str[-1] 
    
    print(data)
    
    >       Start       End
    > 0  00:00:00  01:00:00
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-09-26
      • 1970-01-01
      • 2022-01-12
      • 2018-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-03-13
      相关资源
      最近更新 更多