2016-09-01 97 views
-1

Я пытаюсь удалить пробелы, апострофы и двойные кавычки в данных каждого столбца, используя этот циклPandas - как удалить пробелы в каждом столбце в dataframe?

for c in data.columns: data[c] = data[c].str.strip().replace(',', '').replace('\'', '').replace('\"', '').strip()

, но я получаю эту ошибку:

AttributeError: 'Series' object has no attribute 'strip'

данных является кадр данных и был получен из файла excel

xl = pd.ExcelFile('test.xlsx'); data = xl.parse(sheetname='Sheet1')

Я что-то пропустил? Я добавил str, но это не помогло. Есть лучший способ сделать это.

Я не хочу использовать метки столбцов, например data['column label'], потому что текст может быть другим. Я хотел бы перебрать каждый столбец и удалить символы, упомянутые выше.

входящие данные:

id city country 1 Ontario Canada 2 Calgary ' Canada' 3 'Vancouver Canada

требуемый выход:

id city country 1 Ontario Canada 2 Calgary Canada 3 Vancouver Canada

+0

[DataFrame.replace()] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.replace.html) – MaxU

+0

@MaxU Я не знаком с пандами, но как бы вы идете об удалении заголовка/конечных пробелов? – medev21

+0

, пожалуйста, отправьте образец набора данных и нужный набор данных (после замены) – MaxU

ответ

1

UPDATE: с помощью образца DF:

In [80]: df 
Out[80]: 
    id   city country 
0 1  Ontario Canada 
1 2 Calgary ' Canada' 
2 3 'Vancouver Canada 

In [81]: df.replace(r'[,\"\']','', regex=True).replace(r'\s*([^\s]+)\s*', r'\1', regex=True) 
Out[81]: 
    id  city country 
0 1 Ontario Canada 
1 2 Calgary Canada 
2 3 Vancouver Canada 

OLD Ответ:

вы можете использовать DataFrame.replace() метод:

In [75]: df.to_dict('r') 
Out[75]: 
[{'a': ' x,y ', 'b': 'a"b"c', 'c': 'zzz'}, 
{'a': "x'y'z", 'b': 'zzz', 'c': ' ,s,,'}] 


In [76]: df 
Out[76]: 
     a  b  c 
0 x,y a"b"c  zzz 
1 x'y'z zzz ,s,, 

In [77]: df.replace(r'[,\"\']','', regex=True).replace(r'\s*([^\s]+)\s*', r'\1', regex=True) 
Out[77]: 
    a b c 
0 xy abc zzz 
1 xyz zzz s 

r'\1' - это numbered capturing RegEx group

+0

Большое спасибо, это очень помогает. Последнее, заметили, что есть «r» \ 1', что он на самом деле делает? – medev21

+0

@ medev21, я добавил короткое объяснение к моему ответу - пожалуйста, chek – MaxU

0

данные [с] не возвращает значение, она возвращает ряд (целый столбец данных).

Вы можете применить операцию полосы к целой колонке df.apply. Вы можете применить функцию полосы таким образом.

+0

@Adam_Hughes не следует, где вы добавляете 'apply'? не знакомы с pandas – medev21

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