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