2016-07-21 2 views
1

Я пытаюсь прочитать несколько файлов csv с помощью python. Индекс исходных данных (или первый столбец) имеет небольшую проблему, частичный файл CSV выглядит следующим образом:Как удалить двойные кавычки из индекса файла csv в python

NoDemande;"NoUsager";"Sens";"IdVehiculeUtilise";"NoConducteur";"NoAdresse";"Fait";"HeurePrevue" 
42210000003;"42210000529";"+";"265Véh";"42210000032";"42210002932";"1";"25/07/2015 10:00:04" 
42210000005;"42210001805";"+";"265Véh";"42210000032";"42210002932";"1";"25/07/2015 10:00:04" 
42210000004;"42210002678";"+";"265Véh";"42210000032";"42210002932";"1";"25/07/2015 10:00:04" 
42210000003;"42210000529";"—";"265Véh";"42210000032";"42210004900";"1";"25/07/2015 10:50:03" 
42210000004;"42210002678";"—";"265Véh";"42210000032";"42210007072";"1";"25/07/2015 11:25:03" 
42210000005;"42210001805";"—";"265Véh";"42210000032";"42210004236";"1";"25/07/2015 11:40:03" 

первый индекс не имеет "", после чтения файла, он выглядит как: "NoDemande" в то время как другие нет "", а остальная часть колонны выглядит просто отлично, что делает результат выглядит (не в том же духе):

"NoDemande"  NoUsager Sens IdVehiculeUtilise NoConducteur NoAdresse Fait   HeurePrevue 
42209000003 42209001975 +   245Véh 42209000002 42209005712 1 24/07/2015 06:30:04 
42209000004 42209002021 +   245Véh 42209000002 42209005712 1 24/07/2015 06:30:04 
42209000005 42209002208 +   245Véh 42209000002 42209005713 1 24/07/2015 06:45:04 
42216000357 42216001501 -   190Véh 42216000139 42216001418 1 31/07/2015 17:15:03 
42216000139 42216000788 -   309V7pVéh 42216000059 42216006210 1 31/07/2015 17:15:03 
42216000118 42216000188 -   198Véh 42216000051 42216006374 1 31/07/2015 17:15:03 

Это вызывает проблемы идентификации имя индекса в ближайшие ходы. Как решить эту проблему? Вот мой код для чтения файлов:

import pandas as pd 
import glob 

pd.set_option('expand_frame_repr', False) 
path = r'D:\Python27\mypfe\data_test' 
allFiles = glob.glob(path + "/*.csv") 
frame = pd.DataFrame() 
list_ = [] 

for file_ in allFiles: 
    #Read file 
    df = pd.read_csv(file_,header=0,sep=';',dayfirst=True,encoding='utf8', 
        dtype='str') 

    df['Sens'].replace(u'\u2014','-',inplace=True) 

    list_.append(df) 
    print"fichier lu ",file_ 

frame = pd.concat(list_) 
print frame 
+0

Работа для меня (без 'ф.р. [ 'Sens'] ... 'line) –

+0

Но мне нужна эта функция ... Или есть другие возможные решения? – ch36r5s

+0

Я имел в виду, что проблема с перевернутыми запятыми не появляется на моем компьютере. У меня не было вашего csv, поэтому я не знаю, что такое 'df ['Sens']. Values' are –

ответ

0

Я думаю, что Простейшее устанавливаются новые имена столбцов:

df.columns = ['NoDemande1'] + df.columns[1:].tolist() 
print (df) 
    NoDemande1  NoUsager Sens IdVehiculeUtilise NoConducteur NoAdresse \ 
0 42210000003 42210000529 +   265Véh 42210000032 42210002932 
1 42210000005 42210001805 +   265Véh 42210000032 42210002932 
2 42210000004 42210002678 +   265Véh 42210000032 42210002932 
3 42210000003 42210000529 -   265Véh 42210000032 42210004900 
4 42210000004 42210002678 -   265Véh 42210000032 42210007072 
5 42210000005 42210001805 -   265Véh 42210000032 42210004236 

    Fait   HeurePrevue 
0  1 25/07/2015;10:00:04 
1  1 25/07/2015;10:00:04 
2  1 25/07/2015;10:00:04 
3  1 25/07/2015;10:50:03 
4  1 25/07/2015;11:25:03 
5  1 25/07/2015;11:40:03 

Другим решением является strip значения " из имен столбцов:

print (df) 
    "NoDemande"  NoUsager Sens IdVehiculeUtilise NoConducteur NoAdresse \ 
0 42210000003 42210000529 +   265Véh 42210000032 42210002932 
1 42210000005 42210001805 +   265Véh 42210000032 42210002932 
2 42210000004 42210002678 +   265Véh 42210000032 42210002932 
3 42210000003 42210000529 -   265Véh 42210000032 42210004900 
4 42210000004 42210002678 -   265Véh 42210000032 42210007072 
5 42210000005 42210001805 -   265Véh 42210000032 42210004236 

    Fait   HeurePrevue 
0  1 25/07/2015;10:00:04 
1  1 25/07/2015;10:00:04 
2  1 25/07/2015;10:00:04 
3  1 25/07/2015;10:50:03 
4  1 25/07/2015;11:25:03 
5  1 25/07/2015;11:40:03 

df.columns = df.columns.str.strip('"') 
print (df) 
    NoDemande  NoUsager Sens IdVehiculeUtilise NoConducteur NoAdresse \ 
0 42210000003 42210000529 +   265Véh 42210000032 42210002932 
1 42210000005 42210001805 +   265Véh 42210000032 42210002932 
2 42210000004 42210002678 +   265Véh 42210000032 42210002932 
3 42210000003 42210000529 -   265Véh 42210000032 42210004900 
4 42210000004 42210002678 -   265Véh 42210000032 42210007072 
5 42210000005 42210001805 -   265Véh 42210000032 42210004236 

    Fait   HeurePrevue 
0  1 25/07/2015;10:00:04 
1  1 25/07/2015;10:00:04 
2  1 25/07/2015;10:00:04 
3  1 25/07/2015;10:50:03 
4  1 25/07/2015;11:25:03 
5  1 25/07/2015;11:40:03 
+0

«Переименование» не сработало для меня, но «полоса» сделала это. Но почему я получил «NoDemande» в результате? – ch36r5s

+0

Хммм, это странно. Поэтому я считаю, что первое решение - это самое лучшее - простое имя проблемного столбца и установить новый. – jezrael

+0

Да, я согласен с вами. Или, возможно, мой случай отличается от других, в конце концов, некоторые другие пытались, но не имели этой проблемы ... – ch36r5s

0

На самом деле, я застрял с тем, как удалить двойные кавычки из индекса. После изменения угла, я думаю, может быть, лучше добавить новый столбец, скопировав значения из оригинала и удалив его. Таким образом, новый столбец будет иметь нужный вам индекс. В моем случае, я сделал:

frame['NoDemande'] = frame.ix[:, 0] 
tl = frame.drop(frame.columns[0],axis=1) 

Таким образом я получил новый со всеми я хотел.

Смежные вопросы