3 回答

TA貢獻1827條經(jīng)驗 獲得超8個贊
這是一個擴展性不是很好的 hack:
第 1 步:將a
列轉儲到本機 python 中并創(chuàng)建一個值元組:
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,那么你可以使用下面的代碼,它仍然不能很好地擴展(想象你的列中有空值),并且很粗糙(我們必須索引到列表中才能得到我們想要的) :
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
如前所述,這不能很好地擴展。此外,它沒有提供數(shù)據(jù)表所期望的速度。
目前,數(shù)據(jù)表沒有很好的字符串操作支持(我相信庫維護者目前正在努力解決這個問題,以及其他一些要求的功能)

TA貢獻1836條經(jīng)驗 獲得超13個贊
我知道這是一個老問題,但萬一有人仍在尋找這個問題——在剛剛發(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
上面使用了字符串列上的切片,即依賴于固定格式。還有.re正則表達式的部分,但我只看到match,沒有看到extract。

TA貢獻1804條經(jīng)驗 獲得超7個贊
這是我為了得到你想要的東西而做的一個技巧。我仍在學習數(shù)據(jù)表,所以請耐心等待我完全進入它。
首先,將數(shù)據(jù)表轉換為數(shù)據(jù)框。執(zhí)行我前面列出的操作,然后將數(shù)據(jù)幀轉換回數(shù)據(jù)表。Walla,您現(xiàn)在擁有一個包含所需結果的數(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ù)框將是:
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正則表達式來完成此操作。
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)
它會給你相同的結果:
a b
0 A1 100
1 A2 200
2 A3 300
在此選項中,它不會創(chuàng)建需要刪除的附加列
a b c d
0 A1 100 A 1
1 A2 200 A 2
2 A3 300 A 3
添加回答
舉報