3 回答

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超8個(gè)贊
這是一個(gè)擴(kuò)展性不是很好的 hack:
第 1 步:將a
列轉(zhuǎn)儲(chǔ)到本機(jī) python 中并創(chuàng)建一個(gè)值元組:
tuples?=?[(entry[0],?entry[-1])?for?entry??in?tt['a'].to_list()[0]]
第 2 步:cbind回框架tt
:
tt.cbind(dt.Frame(tuples))
tt
? ? a? ?b? ?C0? C1
0? ?A1? 100 A? ?1
1? ?A2? 200 A? ?2
2? ?A3? 300 A? ?3
如果你只需要 A,那么你可以使用下面的代碼,它仍然不能很好地?cái)U(kuò)展(想象你的列中有空值),并且很粗糙(我們必須索引到列表中才能得到我們想要的) :
tt["A_only"] = dt.Frame([entry[0] for entry in tt['a'].to_list()[0]])
tt
? ? ?a? ?b? ?A_only
0? ?A1? 100? ? ?A
1? ?A2? 200? ? ?A
2? ?A3? 300? ? ?A
如前所述,這不能很好地?cái)U(kuò)展。此外,它沒(méi)有提供數(shù)據(jù)表所期望的速度。
目前,數(shù)據(jù)表沒(méi)有很好的字符串操作支持(我相信庫(kù)維護(hù)者目前正在努力解決這個(gè)問(wèn)題,以及其他一些要求的功能)

TA貢獻(xiàn)1836條經(jīng)驗(yàn) 獲得超13個(gè)贊
我知道這是一個(gè)老問(wèn)題,但萬(wàn)一有人仍在尋找這個(gè)問(wèn)題——在剛剛發(fā)布的 1.0.0 中,可以執(zhí)行以下操作:
tt = dt.Frame({'a' : ['A1','A2','A3'], 'b':[100,200,300]})
tt["A_only"] = tt[:, f.a[0:1]]
tt["num_only"] = tt[:, f.a[1:]]
tt["num_only"] = dt.Type.int8 # Change the type of the column to `int`
tt.ltypes
上面使用了字符串列上的切片,即依賴(lài)于固定格式。還有.re正則表達(dá)式的部分,但我只看到match,沒(méi)有看到extract。

TA貢獻(xiàn)1804條經(jīng)驗(yàn) 獲得超7個(gè)贊
這是我為了得到你想要的東西而做的一個(gè)技巧。我仍在學(xué)習(xí)數(shù)據(jù)表,所以請(qǐng)耐心等待我完全進(jìn)入它。
首先,將數(shù)據(jù)表轉(zhuǎn)換為數(shù)據(jù)框。執(zhí)行我前面列出的操作,然后將數(shù)據(jù)幀轉(zhuǎn)換回?cái)?shù)據(jù)表。Walla,您現(xiàn)在擁有一個(gè)包含所需結(jié)果的數(shù)據(jù)表。
我就是這樣做的。
from datatable import dt, f, g, by, update, join, sort
tt = dt.Frame({'a' : ['A1','A2','A3'], 'b':[100,200,300]})
df = tt.to_pandas()
df = df.join(df.a.str.extract('([a-zA-Z])([0-9])', expand=True).add_prefix('a'))
df = df.rename(columns = {'a0': 'c', 'a1': 'd'})
tt = dt.Frame(df)
tt
其輸出將是:
您可以拆分列并重命名字段。
import pandas as pd
df = pd.DataFrame({'a' : ['A1','A2','A3'], 'b':[100,200,300]})
print (df)
df = df.join(df['a'].str.split(r'(\d.*)', expand=True).add_prefix('a'))
df.drop('a2',axis = 1,inplace=True)
df = df.rename(columns = {'a0': 'c', 'a1': 'd'})
print (df)
輸出將是:
初始數(shù)據(jù)框?qū)⑹牵?/p>
a b
0 A1 100
1 A2 200
2 A3 300
新的 DataFrame 將如下所示:
a b c d
0 A1 100 A 1
1 A2 200 A 2
2 A3 300 A 3
或者,您也可以使用extract正則表達(dá)式來(lái)完成此操作。
import pandas as pd
df1 = pd.DataFrame({'a' : ['A1','A2','A3'], 'b':[100,200,300]})
df1 = df1.join(df1.a.str.extract('([a-zA-Z])([0-9])', expand=True).add_prefix('a'))
df1 = df1.rename(columns = {'a0': 'c', 'a1': 'd'})
print (df1)
它會(huì)給你相同的結(jié)果:
a b
0 A1 100
1 A2 200
2 A3 300
在此選項(xiàng)中,它不會(huì)創(chuàng)建需要?jiǎng)h除的附加列
a b c d
0 A1 100 A 1
1 A2 200 A 2
2 A3 300 A 3
添加回答
舉報(bào)