String to Float в столбце DataFrame - PullRequest
       50

String to Float в столбце DataFrame

0 голосов
/ 17 января 2020

5-й столбец моего DataFrame - это список с плавающей точкой. Я хочу заменить список на максимальное значение из списка. Как я могу это сделать?

Я пытаюсь это сделать, но получаю сообщение об ошибке:

import pandas as pd
import numpy as np

colNames = ['unixTime', 'sampleAmount','Time','samplingRate', 'Data']

data = pd.read_csv("project_fan.csv",  sep = ';', error_bad_lines = False, names = colNames) 
print(data.head())
data['Data'] = [float(x) for x in data.Data.values]
data['Data'] = [np.array(x).mean()for x in data.Data.values]
Traceback (most recent call last):
  File "new.py", line 9, in <module>
    data['Data'] = [float(x) for x in data.Data.values]
ValueError: could not convert string to float: [1618.6294555664062, 1619.0826416015625, 1620.0897216796875, 1620.0393676757812, 1620.0393676757812, 1620.240783691406, 1620.391845703125, 1620.0897216796875, 1619.435119628906, 1620.4925537109373, 16

Также пытался использовать astype (float) .mean, но не работает .

Пример кадра данных:

       unixTime  sampleAmount  Time  samplingRate   Data
0  1.556891e+09         16384   340  48188.235294  [1618.6294555664062,1619.0826416015625,1620.489622]
1  1.556891e+09         16384   341  48046.920821  [1619.78759765625,1619.0826416015625,1620.49754]

1 Ответ

3 голосов
/ 17 января 2020

Из вашего сообщения об ошибке ясно, что данные в столбце «Данные» хранятся в виде строки, содержащей то, что выглядит как Python представление списка чисел с плавающей запятой. Это естественно, учитывая, что это происходит из CSV-файла, который иначе не может представлять список чисел в одном столбце.

Вы можете проверить это с помощью type(data.Data[0]), что, как я ожидаю, скажет вам str.

Поскольку это выглядит как Python представление списка с плавающей точкой, один хороший способ - использовать модуль Python для вычисления литерала Python, что можно сделать с помощью ast.literal_eval() функция . Эта функция может интерпретировать Python базовые c типы (целые числа, числа с плавающей запятой, строки, списки, кортежи, дикты), и это безопасный способ анализа содержимого, поступающего из внешнего источника, такого как файл CSV.

Таким образом, вы можете преобразовать его в фактический список чисел с помощью:

import ast
data['Data'] = data.Data.transform(ast.literal_eval)

Другой подход заключается в том, чтобы заявить, что этот столбец содержит данные, закодированные в JSON, и вместо этого проанализировать его как JSON. В этом случае оказывается, что для списка с плавающей точкой представление Python и JSON эквивалентны, поэтому любой метод должен работать. (Возможно, декодирование JSON будет быстрее, JSON обычно проще, чем общий буквальный синтаксис Python.)

Чтобы декодировать его как JSON (альтернатива вышеописанному):

import json
data['Data'] = data.Data.transform(json.loads)

В этот момент (после преобразования Python или JSON) вы можете использовать такие функции, как np.mean для результата, поскольку это просто список с плавающей точкой, а не строка:

data['Data'] = data.Data.apply(np.mean)
...