如何将列值拆分为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
答案 0 :(得分:2)
这是使用矢量化功能的一种方式。
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
答案 1 :(得分:1)
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
答案 2 :(得分:1)
您可以使用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
答案 3 :(得分:0)
设定:
<a href="" ui-sref="dashboard" >Dashboard</a>
使用extractall
s = pd.Series(data="OR-20180422-12345")
清理dtypes:
df = str.extractall("(?P<CO>[A-Z]{2})-(?P<WOdate>\d{8})-\d+").reset_index(drop=True)
输出:
df['WOdate'] = df['WOdate'].apply(pd.to_datetime);df