2015-05-18 2 views
1

У меня есть эти столбцы:Python Pandas DtypeWarning Укажите опцию dtype при импорте - Как?

['Campaign', 'Ad group', 'Keyword', 'Status', 'Match type', 'Max. CPC', 'Quality score', 'Impressions', 'Clicks', 'CTR', 'Avg. CPC', 'Cost', 'Avg. position', 'Converted clicks', 'Click conversion rate', 'Cost/converted click', 'Bounce rate', 'Pages/session', 'Avg. session duration (seconds)', '% new sessions'] 

Ошибка я получаю говорит:

Warning (from warnings module): 
    File "C:\Python34\lib\site-packages\pandas\io\parsers.py", line 1164 
    data = self._reader.read(nrows) 
DtypeWarning: Columns (5) have mixed types. Specify dtype option on import or set low_memory=False. 

Что означает Columns (5) часть означает? Это позиция столбца? Делает ли Campaign начало столбца в позиции 0 или 1?

Кроме того, я подозреваю, что эта ошибка связана с тем, что мой столбец Max. CPC имеет ' --' в нескольких областях вместо нулей. Я хочу, чтобы этот тип данных столбца был плавающим. Как перевести эти ' --' на 0.00, а также установить этот столбец как тип данных с плавающей точкой при чтении CSV?

Я пробовал:

import pandas as pd 
import numpy as np 

df = pd.read_csv('file.csv', dtype={'Max. CPC': pd.np.float64}) 

print(df.head()) 

Но получить ValueError:

ValueError: could not convert string to float: ' --' 
+1

Вы можете пройти 'na_values = ['-'] 'это преобразует эти значения в' naN', а затем dtype будет плавать или заменять эти значения после загрузки до 0.00, а затем dtype столбца woul d быть float, так как для вашей ошибки столбцов вам нужно будет отправить исходный ввод, чтобы мы могли воспроизвести вашу ошибку. – EdChum

+0

@EdChum Спасибо. Я не знал о na_values. В read_csv так много параметров. Спасибо, что помогли мне в моем учебном задании. В случае, если кто-то заинтересован, это моя последняя строка для ясности: 'df = pd.read_csv ('file.csv', na_values ​​= ['-'], dtype = {'Max CPC': pd.np. float64}) ' – Jarad

+0

Единственное, что здесь,' NaN' - это не то, что вы хотели, но вы могли бы называть 'fillna' после чтения csv, чтобы установить значения 0.00, это предполагает, что вы хотите, чтобы все' NaN' были установлены на 0.00, в том числе, возможно, любые значения «NaN», которые изначально присутствовали в csv – EdChum

ответ

1

Есть 2 подхода я могу думать, один является передать список значений, которые read_csv можно рассмотреть на обрабатывать как значения NaN, это преобразует эти значения в список, подлежащий преобразованию, в NaN, так что dtype этой колонки остается как float, а не object:

df = pd.read_csv('file.csv', dtype={'Max. CPC': pd.np.float64}, na_values=[' --']) 

Вы можете преобразовать эти NaN значения 0.00 вызова fillna:

df['Max. CPC'] = df['Max. CPC'].fillna(0.00) 

Другой загружать как и прежде replace эти значения 0.00:

df['Max. CPC'] = df['Max. CPC'].replace(' --', 0.00) 
Смежные вопросы