我需要幫助將以下文本決議為 Pandas 資料框列
(11/15/22 2:48:46 PM EST) 14:48:33.671 - 42300146: GWS: 2022-11-15 18:18:33.638 RESTQueue No request to signal.
(11/15/22 11:55:59 AM EST) 11:40:22.750 - 31009225: GWS: 2022-11-15 15:10:22.748 Message Type Received: Slots
(11/8/22 8:03:39 AM EST) 07:32:38.188 - 28624922: Timed out waiting for incoming connections, retry after couple of secs
以下是預期的輸出。
| 第 1 列 | 第 2 欄 | 第 3 欄 | 第 4 列 |
|---|---|---|---|
| (美國東部時間 22 年 11 月 15 日下午 2:48:46) | 14:48:33.671 | 42300146 | GWS:2022-11-15 18:18:33.638 RESTQueue 沒有信號請求。 |
| (11/15/22 上午 11:55:59 美國東部標準時間) | 11:40:22.750 | 31009225 | GWS:2022-11-15 15:10:22.748 收到的訊息型別:插槽 |
| (美國東部時間 22 年 11 月 8 日上午 8:03:39) | 07:32:38.188 | 28624922 | 等待傳入連接超時,幾秒后重試 |
注意:第一列和第四列的寬度不同。
我嘗試使用具有特定寬度的 read_fwf 但沒有產生我想要的輸出。我無法使用 read_csv,因為列之間沒有分隔符(空格除外)。
任何幫助,將不勝感激!
先感謝您。
uj5u.com熱心網友回復:
您可以使用正則運算式來決議文本(正則運算式演示。)
text = """\
(11/15/22 2:48:46 PM EST) 14:48:33.671 - 42300146: GWS: 2022-11-15 18:18:33.638 RESTQueue No request to signal.
(11/15/22 11:55:59 AM EST) 11:40:22.750 - 31009225: GWS: 2022-11-15 15:10:22.748 Message Type Received: Slots
(11/8/22 8:03:39 AM EST) 07:32:38.188 - 28624922: Timed out waiting for incoming connections, retry after couple of secs"""
import re
import pandas as pd
pat = re.compile(r"(\(.*?\))\s (\S )\s -\s (\d ):\s (.*)")
data = []
for line in text.splitlines():
m = pat.search(line)
if m:
data.append(m.groups())
df = pd.DataFrame(
data, columns=["Column 1", "Column 2", "Column 3", "Column 4"]
)
print(df)
印刷:
Column 1 Column 2 Column 3 Column 4
0 (11/15/22 2:48:46 PM EST) 14:48:33.671 42300146 GWS: 2022-11-15 18:18:33.638 RESTQueue No request to signal.
1 (11/15/22 11:55:59 AM EST) 11:40:22.750 31009225 GWS: 2022-11-15 15:10:22.748 Message Type Received: Slots
2 (11/8/22 8:03:39 AM EST) 07:32:38.188 28624922 Timed out waiting for incoming connections, retry after couple of secs
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/536685.html
標籤:熊猫数据框解析文本列宽
