簡體   English   中英

Python - CSV 文件中的列包含多個分隔符和結果

[英]Python - Column in CSV file contains multiple delimiters and results

我有一個相當大的 CSV 文件,它有多個列(沒有分隔符)和一個包含使用三個分隔符的結果的列。

主要分隔符是“;”,它分隔結果的天數。

第二個分隔符是“:”,它分隔每天的結果(我只使用 6 個結果中的 2 個)。

第三個分隔符是“/”,它將結果日期和結果的日歷值分開。

我想盡可能避免遍歷“X&Y”列,因為該列本身包含許多分隔的結果,並且有很多行。

第 1 列 Col2 XY
一種 20200331/1D::::1:2;20200401/2D::::3:4;20200402/3D::::5:6
機管局 BB 20210330/1Y::::11:22;20220330/2Y::::33:44;20230330/3Y::::55:66

我想看看:

第 1 列 Col2 日期 日歷值 X
一種 20200331 一維 1 2
一種 20200401 二維 3 4
一種 2020040 3D 5 6
機管局 BB 20210330 1年 11 22
機管局 BB 20220330 2年 33 44
機管局 BB 20220330 3年 55 66
import pandas as pd
df = pd.DataFrame({'Col1':['A','AA'], 'Col2':['B', 'BB'], 'Col3':['20200331/1D::::1:2;20200401/2D::::3:4;20200402/3D::::5:6','20210330/1Y::::11:22;20220330/2Y::::33:44;20230330/3Y::::55:66']})

這里是一個解決方案,您可以嘗試一下,拆分基於分隔符(;)隨后explode轉變為行。 接着是extract & 最后concat幀以獲得結果幀。

import pandas as pd
import re

df = pd.DataFrame({'Col1': ['A', 'AA'], 'Col2': ['B', 'BB'],
                   'Col3': ['20200331/1D::::1:2;20200401/2D::::3:4;20200402/3D::::5:6',
                            '20210330/1Y::::11:22;20220330/2Y::::33:44;20230330/3Y::::55:66']})

df['Col3'] = df['Col3'].str.split(";")

# extract features from the string
extract_ = re.compile(r"(?P<Date>\w+)/(?P<CalendarValue>\w+):+(?P<X>.+):(?P<Y>.+)")

pd.concat([
    df.drop(columns='Col3'),
    df['Col3'].explode().str.extract(extract_, expand=True)
], axis=1)

Out[*]:

  Col1 Col2      Date CalendarValue   X   Y
0    A    B  20200331            1D   1   2
0    A    B  20200401            2D   3   4
0    A    B  20200402            3D   5   6
1   AA   BB  20210330            1Y  11  22
1   AA   BB  20220330            2Y  33  44
1   AA   BB  20230330            3Y  55  66

Regex Demo

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM