2016-06-18 3 views
0

Использование панды Я добавляю новые столбцы в DataFrame:Панды извлечь несколько столбцов

df["Year"] = df["concat"].str.extract("(\d\d\d\d$)", expand=False) 
df["Month"] = df["concat"].str.extract("(\d\d)\_\d\d\d\d$", expand=False) 
df["Measure"] = df["concat"].str.extract("^(.*)\_\d\d\_\d\d\d\d$", expand=False) 

Это работает, но очень медленно. Я думал о том, делать все 3 операции за один шаг (в надежде, что увеличит производительность):

df["Measure", "Year", "Month"] = (df["concat"].str.extract("^(?P<Measure>.*)\_(?P<Month>\d\d)\_(?P<Year>\d\d\d\d)$", expand=True)) 

Но это не работает (ValueError: Неверное число элементов прошло 3, размещение подразумевает 1).

Как заставить это работать или как эффективно извлечь эту информацию?

+0

https://meta.stackexchange.com/a/5235/289619 – 0m3r

ответ

1

Вы вводите 3 отдельных значения в качестве ссылки на df как df["Measure", "Year", "Month"]. "Measure", "Year" и "Month" вместо одного массива ["Measure","Year","Month"]. Вместо этого он должен выглядеть как df[["Measure", "Year", "Month"]].

В качестве альтернативы вы можете использовать функцию конкатенации pandas.

df2= df["concat"].str.extract("^(?P<Measure>.*)\_(?P<Month>\d\d)\_(?P<Year>\d\d\d\d)$", expand=True) 
pd.concat([df,df2],axis = 1) 
Смежные вопросы