大Pandas在一个月一天的时间后从绳子的其余部分分开

2024-09-26 21:50:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用熊猫数据帧。我正在尝试从字符串的其余部分拆分日期和时间之后的列。你知道吗

df
   data
0  Oct 22 12:56:52 server1
1  Oct 22 12:56:52 server2
2  Oct 22 12:56:53 server2
3  Oct 22 12:56:54 server2
4  Oct 22 12:56:56 comp2

期望输出:

df
   date              machine
0  Oct 22 12:56:52   server1
1  Oct 22 12:56:52   server2
2  Oct 22 12:56:53   server2
3  Oct 22 12:56:54   server2
4  Oct 22 12:56:56   comp2

如果我尝试像df["data"].str.extract('^(.*? [0-9]{2}) (.*)$')这样的方法,它只会在22(天)之后剥离所有内容


Tags: 数据方法字符串内容dfdatadate时间
3条回答

您还可以传递日期\时间的确切形式:

df['data'].str.extract('(\w* \d* \d*:\d*:\d*) (.*)')

输出:

                 0        1
0  Oct 22 12:56:52  server1
1  Oct 22 12:56:52  server2
2  Oct 22 12:56:53  server2
3  Oct 22 12:56:54  server2
4  Oct 22 12:56:56    comp2

理解

这取决于数据格式始终为15个字符。
另外,由于我们将不得不删除一列'data',所以我认为最好是从头开始创建一个数据帧。你知道吗

pd.DataFrame([[s[:15], s[16:]] for s in df.data], columns=['date', 'machine'])

              date  machine
0  Oct 22 12:56:52  server1
1  Oct 22 12:56:52  server2
2  Oct 22 12:56:53  server2
3  Oct 22 12:56:54  server2
4  Oct 22 12:56:56    comp2

rsplit

取决于'machine'名称从不包含空格。你知道吗

这是因为pandas.Series.str提供的字符串访问器是一个iterable,可以在类似于x, y = (1, 2)的赋值语句中使用

还请注意,我毫无歉意地接受了使用^{} in this instance from @jezrael的想法

df['date'], df['machine'] = df.pop('data').str.rsplit(n=1).str

df

              date  machine
0  Oct 22 12:56:52  server1
1  Oct 22 12:56:52  server2
2  Oct 22 12:56:53  server2
3  Oct 22 12:56:54  server2
4  Oct 22 12:56:56    comp2

使用positive lookbehind{semicolon}{two numbers}{space}上拆分:

详情:

  • (?<=)是正向lookback(检查字符串前面是否有任何内容)
  • :\d{2}是模式:{semicolon}{two numbers}
  • \s是空白

结论:我们在whitespace上分裂,但前提是前面有上述模式。你知道吗

s = df['data'].str.split('(?<=:\d{2})\s')

df['date'] = s.str[0]
df['machine'] = s.str[1]
df = df.drop(columns='data')

或者作为piRSquared&;jezraelsuggest in the comments,在一行中:

df['date'], df['machine'] = zip(*df.pop('data').str.split('(?<=:\d{2})\s'))

输出

              date  machine
0  Oct 22 12:56:52  server1
1  Oct 22 12:56:52  server2
2  Oct 22 12:56:53  server2
3  Oct 22 12:56:54  server2
4  Oct 22 12:56:56    comp2

相关问题 更多 >

    热门问题