1

我创建了一个数据表,

DT_EX = dt.Frame({'Year sold':[2000,2002,2004,2006],'Year Construction':[1990,1992,1994,1996]})

并将其视为

Out[4]: 
   | Year sold  Year Construction
-- + ---------  -----------------
 0 |      2000               1990
 1 |      2002               1992
 2 |      2004               1994
 3 |      2006               1996

[4 rows x 2 columns]

在这里我们可以注意到每列在两个单词之间包含一个空格,

In [7]: DT_EX.names

Out[7]: ('Year sold', 'Year Construction')

我现在选择第一列,

DT[:,f.Year sold] 

它抛出一个错误

 File "<ipython-input-5-29b1f34a6dc6>", line 1
    DT[:,f.Year sold]
                   ^
SyntaxError: invalid syntax

现在我在列名周围加上了一些引号并尝试选择,

In [6]: DT[:,f.`Year sold`]                                                                                                                                                         
 File "<ipython-input-6-a007534b786e>", line 1
    DT[:,f.`Year sold`]
           ^
SyntaxError: invalid syntax

那么如何指定这些列名,我可以做一些字符串操作,比如用下划线 _ Year_sold 或 Year_Construction 等调整空间等。

加载数据集时 fread() 中是否有任何选项来处理这种类型的列名?

  • 将所有列转换为小写或大写名称

  • 删除列名之间的所有特殊符号空格

  • 如果需要,请缩短列名长度。

4

1 回答 1

3

这应该工作:

In [1]: import datatable as dt                                                                                         

In [2]: DT_EX = dt.Frame({'Year sold':[2000,2002,2004,2006],'Year Construction':[1990,1992,1994,1996]})                

In [3]: DT_EX[:, dt.f['Year sold']]                                                                                    
Out[3]: 
   | Year sold
-- + ---------
 0 |      2000
 1 |      2002
 2 |      2004
 3 |      2006

[4 rows x 1 column]

In [4]:  

使用f带括号的选择器还允许使用变量进行选择:

In [6]: feature = 'Year sold'                                                                                          

In [7]: DT_EX[:, dt.f[feature]]                                                                                        
Out[7]: 
   | Year sold
-- + ---------
 0 |      2000
 1 |      2002
 2 |      2004
 3 |      2006

[4 rows x 1 column]

此外,如果您想用下划线替换空格,只需执行以下操作:

In [8]: DT_EX.names = [feat.replace(' ', '_') for feat in DT_EX.names]                                                 

In [9]: DT_EX                                                                                                          
Out[9]: 
   | Year_sold  Year_Construction
-- + ---------  -----------------
 0 |      2000               1990
 1 |      2002               1992
 2 |      2004               1994
 3 |      2006               1996

[4 rows x 2 columns]

In [10]:                   

希望这可以帮助。

于 2020-06-06T07:00:42.107 回答