繁体   English   中英

大熊猫将列文本分为多列

[英]pandas split column text into multiple columns

如何将列值拆分为2个新列:

数据:

WO No
OR-20180422-12345

输入:

df[['CO','WO Date',WO ID']] = df.pop('WO No').str.split('-', expand=True)

预期产量:

 CO     WO Date #as dd/mm/yyyy date format
 OR     22/04/2018

这是使用矢量化功能的一种方式。

df = pd.DataFrame({'WO No': ['OR-20180422-12345']})

df[['CO', 'WO Date', 'WO ID']] = df['WO No'].str.split('-', expand=True)

df['WO Date'] = pd.to_datetime(df['WO Date']).dt.strftime('%d/%m/%Y')

df = df[['CO', 'WO Date']]

print(df)

#    CO     WO Date
# 0  OR  22/04/2018
def rule(a):
    vals = a.split("-")
    d = pd.to_datetime(vals[1])
    d = d.strftime('%d/%m/%Y') # your format 
    return pd.Series({"C0": vals[0], "W0 Date": d})

df["W0 No"].apply(rule)

产量

    C0  W0 Date
0   OR  22/04/2018

您可以使用str.split

def split_it(s):
    return pd.Series({'CO': s[0], 'WO Date': pd.to_datetime(s[1])})
>>> df['WO no'].str.split('-').apply(split_it)
    CO  WO Date
0   OR  2018-04-22

设定:

s = pd.Series(data="OR-20180422-12345")    

使用extractall

df = str.extractall("(?P<CO>[A-Z]{2})-(?P<WOdate>\d{8})-\d+").reset_index(drop=True)

清理dtypes:

df['WOdate'] = df['WOdate'].apply(pd.to_datetime);df

日期:

   CO     WOdate
0  OR 2018-04-22

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM