2015-06-19 6 views
2

Я прочитал фрейм данных в python с именем столбца, которое содержит символ евро «price_». Python видит столбец как price_ . Это не позволит мне ссылаться на этот столбец, используя либо €, либоНеизвестная проблема с символом

File "<ipython-input-53-d7f8249147e7>", line 1 
df[price_€] = df[0].str.replace(r'[€,]', '').astype('float') 
     ^
SyntaxError: invalid syntax 

Любые идеи, как удалить это из имени столбца, так что я могу начать со ссылкой на него?

+0

Вы говорите, что когда вы печатаете данные, вы видите 'price_ '? Если это так, то ваша проблема заключается в кодировке –

+0

Hi Padraic, да, когда я печатаю рамку, я вижу 'price_ '. Есть ли способ обойти это или мне нужно вручную изменить входные файлы? – Marcus

+0

Как вы создаете dataframe? –

ответ

1

Вы можете использовать лямбда-фильтр, как показано ниже на струне

import string 
s = "some\x00string. with\x15 funny characters" 
filter(lambda x: x in string.printable, s) 

выход есть

'somestring. with funny characters' 
+0

Как ваш ответ каким-либо образом связан с вопросом OP? – EdChum

+0

Хорошо фильтруйте строки перед использованием в качестве ключа. Он спросил, как удалить символы spl. – Bharadwaj

+0

Ваш ответ для общей строки, это строковые данные в кадре данных pandas, так как ваш ответ неприменим, поскольку он не является специфичным для панд, также OP сделал основную ошибку, не передача строки для имени столбца – EdChum

2

Вы не можете использовать знак евро в имени переменной:

Identifiers (also referred to as names) are described by the following lexical definitions: 

identifier ::= (letter|"_") (letter | digit | "_")* 
letter  ::= lowercase | uppercase 
lowercase ::= "a"..."z" 
uppercase ::= "A"..."Z" 
digit  ::= "0"..."9" 

Вы должны использовать строку:

df["price_€"] ... 

панды на самом деле не имеет никаких проблем у меня с евро знак:

import pandas as pd 

df = pd.DataFrame([[1, 2]], columns=["£", "€"]) 

print(df["€"]) 
print(df["£"]) 
0 2 
Name: €, dtype: int64 
0 1 
Name: £, dtype: int64 

Fil fil е cp1252 закодирован поэтому вам нужно указать кодировку:

mport pandas as pd 
iimport codecs 
df = pd.read_csv("PPR-2015.csv",header=0,encoding="cp1252") 

print(df.columns) 
Index([u'Date of Sale (dd/mm/yyyy)', u'Address', u'Postal Code', u'County', 
u'Price (€)', u'Not Full Market Price', u'VAT Exclusive', u'Description of Property', u'Property Size Description'], dtype='object') 

print(df[u'Price (€)']) 
0  €138,000.00 
1  €270,000.00 
2  €67,000.00 
3  €900,000.00 
4  €176,000.00 
5  €155,000.00 
6  €100,000.00 
7  €120,000.00 
8  €470,000.00 
9  €140,000.00 
10 €592,000.00 
11  €85,000.00 
12 €422,500.00 
13 €225,000.00 
14  €55,000.00 
... 
17433 €262,000.00 
17434 €155,000.00 
17435 €750,000.00 
17436  €96,291.69 
17437 €112,000.00 
17438 €350,000.00 
17439 €190,000.00 
17440  €25,000.00 
17441 €100,000.00 
17442  €75,000.00 
17443  €46,000.00 
17444 €175,000.00 
17445  €48,500.00 
17446 €150,000.00 
17447 €400,000.00 
Name: Price (€), Length: 17448, dtype: object 

Затем изменить плавать:

df[u'Price (€)'] = df[u'Price (€)'].str.replace(ur'[€,]'), '').astype('float') 

print(df['Price (€)'.decode("utf-8")]) 

Выход:

0  138000 
1  270000 
2  67000 
3  900000 
4  176000 
5  155000 
6  100000 
7  120000 
8  470000 
9  140000 
10 592000 
11  85000 
12 422500 
13 225000 
14  55000 
... 
17433 262000.00 
17434 155000.00 
17435 750000.00 
17436  96291.69 
17437 112000.00 
17438 350000.00 
17439 190000.00 
17440  25000.00 
17441 100000.00 
17442  75000.00 
17443  46000.00 
17444 175000.00 
17445  48500.00 
17446 150000.00 
17447 400000.00 
Name: Price (€), Length: 17448, dtype: float64 
0

Вы должны использовать rename переименовать имя столбца :

In [189]: 
df = pd.DataFrame(columns = ['price_€']) 
df 

Out[189]: 
Empty DataFrame 
Columns: [price_€] 
Index: [] 

In [191]: 
df.rename(columns = {'price_€':'price'},inplace=True) 
df 

Out[191]: 
Empty DataFrame 
Columns: [price] 
Index: [] 

Также df[price_€] является недопустимым способом выбора столбца, вам необходимо передать строку, так что df['price_€'] - это правильная форма.

Кроме этого:

df[0].str.replace(r'[€,]', '').astype('float') 

Неясно, что вы пытаетесь здесь, df[0] собирается поднять KeyError снова, потому что индекс столбца вам нужно передать строку.

Я также не понимаю, почему вы бросаете столбец в поплавок, вы не объяснили эту часть.

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