Python - Невозможно преобразовать строку в число с плавающей точкой из-за захвата заголовков при преобразовании - PullRequest
0 голосов
/ 18 марта 2019

Я пытаюсь преобразовать определенные столбцы из строки в число с плавающей точкой в ​​Python, но у меня всегда будет ошибка:

не может преобразовать строку в число с плавающей точкой: 'Минуты задержки тура'

Минуты задержки тура - это имя определенного столбца, которое содержит значения, например 6,31 или целые числа (если результатом является целое число), например 9,10 и т. Д. Мой код:

import pandas as pd
import numpy as np

data = pd.read_csv('H:\\testing.csv',thousands = ',')
data.drop([0], axis=1) #Removes the header? based on another post
cols=['Tour Delay Minutes','Passenger Delay Minutes','Driver Delay Minutes','Engine Failures','Vehicle Failures'] #Columns containing ints and floats 
for col in cols: #Loop to transform all column strings to floats by default
    data[col]= data[col].astype(dtype=np.float64)
data.info()

Типы, указанные в точке загрузки:

Unnamed: 0                         int64
Time Period                       object #contains day,midday,early afternoon
Tour Number                       object #contains integers
Tour Delay Minutes                object #contains float numbers
Passenger Delay Minutes           object #contains float numbers
Driver Delay Minutes              object #contains float numbers
Engine Failures                   object #contains integer numbers
Vehicle Failures                  object #contains integer numbers

Полагаю, ошибка также будет распространяться на все остальные столбцы, помеченные как объекты (как показано выше), и это потому, что Python также пытается преобразовать заголовок (строка 1). Любые обходные пути по этому вопросу, пожалуйста? Я также попробовал приведенный ниже код, однако он не работал:

data['Tour Delay Minutes'].astype(str).astype(float)

Изменить: добавлен образец набора данных, чтобы помочь в поиске решения - PLease см. Ссылку:

https://i.stack.imgur.com/o4zcX.png

 Unnamed: 0 (index) Time Period Tour Number Tour Delay Minutes  Passenger Delay Minutes Driver Delay Minutes    Engine Failures Vehicle Failures
0   2018/19-P08 261803  11  6   5   2   0
1   2018/19-P08 325429  16  12  4   0   0
2   2018/19-P08 359343  14  5   9   0   0
3   2018/19-P08 366609  18  10  8   0   0
4   2018/19-P08 370697  63  37  26  2   0
5   2018/19-P08 392535  1474    140 1334    37.1194012  0.022591857
6   2018/19-P09 394752  0   0   0   0   0
7   2018/19-P09 408713  31  13  18  1.25    0
8   2018/19-P09 433763  62  49  13  4.766666667 1
9   2018/19-P09 440100  0   0   0   1   1
10  2018/19-P09 440258  17  14  3   1   0
11  2018/19-P10 440280  46  46  0   2.933333333 2
12  2018/19-P10 440929  22  7   15  1   0
13  2018/19-P10 441110  26  13  13  0   0
14  2018/19-P10 441585  4   0   4   0   0
15  2018/19-P10 442092  39  12  27  1.923076923 0
16  2018/19-P11 442105  0   0   0   0   0
17  2018/19-P11 442173  3   0   3   0   0
18  2018/19-P11 443580  4   2   2   0.428571429 0
19  2018/19-P11 443594  3   2   1   0.285714286 0
20  2018/19-P12 443599  2   1   1   0.285714286 0
21  2018/19-P12 443709  5   0   5   0   0
22  2018/19-P12 443885  3   0   3   0   0
23  2018/19-P12 444040  15  9   6   0.857142857 0
24  2018/19-P12 445021  3   0   3   0   0

Редактировать 2: добавлен примерный набор данных - ссылка на изображение все еще доступна

1 Ответ

0 голосов
/ 19 марта 2019

После нескольких дней тестирования файла и запуска различных сценариев, я думаю, я решил свою проблему.

Проблема заключалась в том, что дублирующие заголовки добавлялись из другого сценария объединения CSV, и это вызывало проблемы при попытке преобразовать столбцы моего мастер-файла.

Теперь у меня вопрос, как я могу удалить дубликаты заголовков из основного файла CSV (около 17 миллионов строк)?

Редактировать: проблема с дублирующимися заголовками решена

Я последовал совету jezrael и смог успешно удалить / удалить все дублирующиеся строки, содержащие заголовки.Ссылка прикреплена для интересующихся.Большое спасибо пользователям, которые внесли свой вклад в решение этой проблемы.

 y = x[~x['Time Period'].str.contains('Time Period')]
#The above helped me remove all applicable rows that contained the string "Time Period

    y.to_csv("H:\\modded.csv")
data1 = pd.read_csv("H:\\modded.csv")
data1.dtypes
#I then save "y" as new CSV file, load the new dataset and voila the columns containing numbers have changed dtypes to float64.

Как удалить строки из фрейма данных pandas, содержащего определенную строку в определенном столбце?

Если вы столкнулись с подобной проблемой, и этот ответ решил ее, пожалуйста, не забудьте высказать и вопросы, и ответы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...