Python graphlab从现有sframe添加变量列
我有一个框架Python graphlab从现有sframe添加变量列,python,pandas,graphlab,Python,Pandas,Graphlab,我有一个框架 a | b ----- 2 | 31 4 5 0 | 1 9 1 | 2 84 现在我想得到以下结果 a | b | c | d | e ---------------------- 2 | 31 4 5 | 31|4 | 5 0 | 1 9 | 1 | 9 | 0 1 | 2 84 | 2 | 84 | 0 知道怎么做吗?或者我必须使用其他工具 感谢使用熊猫: In [409]: sf Out[409]: Columns: a int
a | b
-----
2 | 31 4 5
0 | 1 9
1 | 2 84
现在我想得到以下结果
a | b | c | d | e
----------------------
2 | 31 4 5 | 31|4 | 5
0 | 1 9 | 1 | 9 | 0
1 | 2 84 | 2 | 84 | 0
知道怎么做吗?或者我必须使用其他工具
感谢使用熊猫:
In [409]: sf
Out[409]:
Columns:
a int
b str
Rows: 3
Data:
+---+--------+
| a | b |
+---+--------+
| 2 | 31 4 5 |
| 0 | 1 9 |
| 1 | 2 84 |
+---+--------+
[3 rows x 2 columns]
In [410]: df = sf.to_dataframe()
In [411]: newdf = pd.DataFrame(df.b.str.split().tolist(), columns = ['c', 'd', 'e']).fillna('0')
In [412]: df.join(newdf)
Out[412]:
a b c d e
0 2 31 4 5 31 4 5
1 0 1 9 1 9 0
2 1 2 84 2 84 0
转换回SFrame:
In [498]: SFrame(df.join(newdf))
Out[498]:
Columns:
a int
b str
c str
d str
e str
Rows: 3
Data:
+---+--------+----+----+---+
| a | b | c | d | e |
+---+--------+----+----+---+
| 2 | 31 4 5 | 31 | 4 | 5 |
| 0 | 1 9 | 1 | 9 | 0 |
| 1 | 2 84 | 2 | 84 | 0 |
+---+--------+----+----+---+
[3 rows x 5 columns]
如果需要整数/浮点数,还可以执行以下操作:
In [506]: newdf = pd.DataFrame(map(lambda x: [int(y) for y in x], df.b.str.split().tolist()), columns = ['c', 'd', 'e'])
In [507]: newdf
Out[507]:
c d e
0 31 4 5.0
1 1 9 NaN
2 2 84 NaN
In [508]: SFrame(df.join(newdf))
Out[508]:
Columns:
a int
b str
c int
d int
e float
Rows: 3
Data:
+---+--------+----+----+-----+
| a | b | c | d | e |
+---+--------+----+----+-----+
| 2 | 31 4 5 | 31 | 4 | 5.0 |
| 0 | 1 9 | 1 | 9 | nan |
| 1 | 2 84 | 2 | 84 | nan |
+---+--------+----+----+-----+
[3 rows x 5 columns]
使用熊猫:
In [409]: sf
Out[409]:
Columns:
a int
b str
Rows: 3
Data:
+---+--------+
| a | b |
+---+--------+
| 2 | 31 4 5 |
| 0 | 1 9 |
| 1 | 2 84 |
+---+--------+
[3 rows x 2 columns]
In [410]: df = sf.to_dataframe()
In [411]: newdf = pd.DataFrame(df.b.str.split().tolist(), columns = ['c', 'd', 'e']).fillna('0')
In [412]: df.join(newdf)
Out[412]:
a b c d e
0 2 31 4 5 31 4 5
1 0 1 9 1 9 0
2 1 2 84 2 84 0
转换回SFrame:
In [498]: SFrame(df.join(newdf))
Out[498]:
Columns:
a int
b str
c str
d str
e str
Rows: 3
Data:
+---+--------+----+----+---+
| a | b | c | d | e |
+---+--------+----+----+---+
| 2 | 31 4 5 | 31 | 4 | 5 |
| 0 | 1 9 | 1 | 9 | 0 |
| 1 | 2 84 | 2 | 84 | 0 |
+---+--------+----+----+---+
[3 rows x 5 columns]
如果需要整数/浮点数,还可以执行以下操作:
In [506]: newdf = pd.DataFrame(map(lambda x: [int(y) for y in x], df.b.str.split().tolist()), columns = ['c', 'd', 'e'])
In [507]: newdf
Out[507]:
c d e
0 31 4 5.0
1 1 9 NaN
2 2 84 NaN
In [508]: SFrame(df.join(newdf))
Out[508]:
Columns:
a int
b str
c int
d int
e float
Rows: 3
Data:
+---+--------+----+----+-----+
| a | b | c | d | e |
+---+--------+----+----+-----+
| 2 | 31 4 5 | 31 | 4 | 5.0 |
| 0 | 1 9 | 1 | 9 | nan |
| 1 | 2 84 | 2 | 84 | nan |
+---+--------+----+----+-----+
[3 rows x 5 columns]
输出:
a | b | c | d | e
----------------------
2 | 31 4 5 | 31|4 | 5
0 | 1 9 | 1 | 9 | 0
1 | 2 84 | 2 | 84 | 0
输出:
a | b | c | d | e
----------------------
2 | 31 4 5 | 31|4 | 5
0 | 1 9 | 1 | 9 | 0
1 | 2 84 | 2 | 84 | 0
这可以由SFrame本身完成,而不使用Pandas。只需使用“”功能即可 Pandas提供了各种各样的函数来处理数据集,但将SFrame转换为Pandas DataFrame很不方便,反之亦然 如果处理的数据超过10GB,Pandas将无法正确处理数据集。(但SFrame可以)
这可以由SFrame本身完成,而不使用Pandas。只需使用“”功能即可 Pandas提供了各种各样的函数来处理数据集,但将SFrame转换为Pandas DataFrame很不方便,反之亦然 如果处理的数据超过10GB,Pandas将无法正确处理数据集。(但SFrame可以)
谢谢,这是可行的,但只有在通过graphlab转换回SFrame时。SFrame(df)我得到了这个错误“TypeError:无法从integer、string类型推断出一个普通类型”。有什么想法吗?事实上,如果我使用df.descripe(),===>TypeError:Unhable type:'dict'@ikel,我用
fillna('0'替换了fillna(0)
)
现在转换工作了!谢谢,这是可行的,但只有在通过graphlab转换回SFrame时。SFrame(df)我得到了这个错误“TypeError:无法从integer、string类型推断出一个普通类型”。有什么想法吗?事实上,如果我使用df.descripe(),===>TypeError:Unhable type:'dict'@ikel,我用fillna('0'替换了fillna(0)
)
现在转换工作了!