Эффективный способ преобразовать строковый столбец с разделенными запятыми числами в массив 2D NumPy? - PullRequest
1 голос
/ 21 января 2020

У меня есть набор данных Pandas с одним строковым столбцом, содержащим последовательность чисел с запятыми, разделенных запятыми (как одна большая строка):

4677579    -0.26751,0.559024,0.690269,0.0446298,0.967434,...
5193597    -0.587694,0.15063,-0.163831,-0.696565,0.972488...
596398     -0.732648,0.69533,0.722288,-0.0453636,0.435788...
5744417    -0.354733,-0.782564,-0.301927,0.263827,0.96237...
2464195    -0.326526,0.341944,0.330533,-0.250108,0.673552...

Итак, первая строка имеет следующий формат:

{4677579: '-0.26751,0.559024,[..skipped..],-0.394059,0.974787'}

Мне нужно преобразовать этот столбец в (предпочтительно 2D NumPy) массив с плавающей точкой:

array([[-2.67510e-01,  5.59024e-01,  6.90269e-01,  skipped,  4.45222e-01, -1.82369e-01],
       [-5.87694e-01,  1.50630e-01, -1.63831e-01, skipped,  9.47768e-01]])

Проблема состоит в том, что набор данных очень большой (> 10M строк,> 400 поплавков / строка), и мои наивные подходы к конвертации, такие как:

vectordata.apply(lambda x: np.fromstring(x,  sep=','))

или

vectordata.apply(lambda x: list(map(float,x.split(','))))

просто тайм-аут (они работают нормально, если общий размер набора данных < 5 миллионов строк).

Есть идеи, как можно оптимизировать эту операцию, чтобы она работала с большим набором данных?

...