我有一个具有4000多个数据的csv,其中每个单元格包含一个元组,该元组具有特定的协调性。我想将其转换为numpy数组以使用。在调用test("cache, getStorageLevel") {
// test to see if getStorageLevel returns correct value after caching
withSpark { sc =>
val verts = sc.parallelize(List((0L, 0), (1L, 1), (1L, 2), (2L, 3), (2L, 3), (2L, 3)))
val edges = EdgeRDD.fromEdges(sc.parallelize(List.empty[Edge[Int]]))
assert(edges.getStorageLevel == StorageLevel.NONE)
edges.cache()
assert(edges.getStorageLevel == StorageLevel.MEMORY_ONLY)
}
}
之前,我使用熊猫将其转换为DataFrame。但是,在调用df.values
之后,该元组将变为字符串df.values
。有可能防止这种情况发生吗?谢谢。
"(x,y)"
答案 0 :(得分:1)
我认为问题是csv总是将元组作为字符串。
因此需要将它们转换:
import ast
df['col'] = df['col'].apply(ast.literal_eval)
或者如果所有列都是元组:
df = df.applymap(ast.literal_eval)
答案 1 :(得分:0)
似乎您是从本地路径读取文件的? 我的答案是使用eval更改字符串:
df.apply(lambda x:x.apply(eval))
答案 2 :(得分:0)
在读取csv之后更改数据类型的另一种方法:
df['col'].apply(tuple)