当我在colab上编程时,我一直遇到这个问题。
这是我的df
0 1
0 [2.7436598593417045e-05, 3.731542193080655e-05]
1 [8.279973504084787e-05, 2.145002145002145e-05]
2 [0.00022534319714215346, 0.0002031172259231674]
3 [3.239841667031943e-05, 2.7771297808289177e-05]
4 [0.00011311134356928321, 9.428422928088026e-05]
我想把df[1]中的数据转换成一个列表,这样我就可以把它输入到我的模型中。为此,我运行:
df[1].to_list()
然后我得到:
['[2.7436598593417045e-05, 3.731542193080655e-05]',
'[8.279973504084787e-05, 2.145002145002145e-05]',
'[0.00022534319714215346, 0.00020311722592316746]',
'[3.239841667031943e-05, 2.7771297808289177e-05]',
'[0.00011311134356928321, 9.428422928088026e-05]']
这是一个字符串的列表,我不能用它来输入到模型中。我一直在本地使用这段代码,而且工作得很好,但在 colab 上我得到了这个结果。有什么办法吗?我想要的结果是。
[[2.7436598593417045e-05, 3.731542193080655e-05],
[8.279973504084787e-05, 2.145002145002145e-05],
[0.00022534319714215346, 0.00020311722592316746],
[3.239841667031943e-05, 2.7771297808289177e-05],
[0.00011311134356928321, 9.428422928088026e-05]]
试试 ast.literal_eval
from ast import literal_eval
df[1].map(literal_eval).to_list()
[[2.7436598593417045e-05, 3.731542193080655e-05],
[8.279973504084787e-05, 2.145002145002145e-05],
[0.00022534319714215346, 0.00020311722592316746],
[3.239841667031943e-05, 2.7771297808289177e-05],
[0.00011311134356928321, 9.428422928088026e-05]]
如果我用列表元素做一个数据框架。
In [135]: df = pd.DataFrame([[1,[1,3]],[2,[3,5]]])
In [136]: df
Out[136]:
0 1
0 1 [1, 3]
1 2 [3, 5]
In [137]: df.dtypes
Out[137]:
0 int64
1 object
dtype: object
In [138]: df[1].to_list()
Out[138]: [[1, 3], [3, 5]]
用列表的字符串做同样的事情,
In [139]: df1 = pd.DataFrame([[1,'[1,3]'],[2,'[3,5]']])
In [140]: df1
Out[140]:
0 1
0 1 [1,3]
1 2 [3,5]
In [141]: df1.dtypes
Out[141]:
0 int64
1 object
dtype: object
In [142]: df1[1].to_list()
Out[142]: ['[1,3]', '[3,5]']
df1
看起来就像 df
,只是列元素是字符串。
df1
框架的类型通常是由于保存 df
到 csv
,并重新加载它。
In [143]: df.to_csv('test.csv')
In [144]: cat test.csv
,0,1
0,1,"[1, 3]"
1,2,"[3, 5]"
为了符合表格格式,它必须引用列表。