2015-10-14 7 views
19

Mam ten wiersz w moim kodu, który przetwarza moje dane numeryczne ...Pandas ".convert_objects (convert_numeric = True)" przestarzałe

data["S1Q2I"] = data["S1Q2I"].convert_objects(convert_numeric=True) 

Chodzi o to, że teraz nowa wersja pandy (0.17.0) powiedział, że ta funkcja jest przestarzała .. jest to błąd:

FutureWarning: convert_objects is deprecated. 
Use the data-type specific converters pd.to_datetime, 
pd.to_timedelta and pd.to_numeric. 
data["S3BD5Q2A"] = data["S3BD5Q2A"].convert_objects(convert_numeric=True) 

Więc poszedłem do nowej dokumentacji i nie mogłem znaleźć żadnych przykładów, jak używać nowej funkcji do konwersji moich danych. ..

To tylko tak:

"DataFrame.convert_objects has been deprecated in favor of type-specific functions pd.to_datetime, pd.to_timestamp and pd.to_numeric (new in 0.17.0) (GH11133)."

Każda pomoc byłaby miła!

+1

To znaczy, [to] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.to_timedelta .html) i [this] (http://pandas.pydata.org/pandas-docs/stable/generated/pandas.to_numeric.html#pandas.to_numeric)? Czego się spodziewasz/czego nie potrzebujesz? – EdChum

+6

Po prostu: dane ['S1Q2I'] = pd.to_numeric (data ['S1Q2I']) ' –

+0

Dzięki! Teraz zrozumiałem!! – guidebortoli

Odpowiedz

11

Jak wyjaśnił @EvanWright w komentarzach,

data['S1Q2I'] = pd.to_numeric(data['S1Q2I']) 

jest obecnie preferowanym sposobem konwersji typów. Szczegółowe wyjaśnienie zmiany można znaleźć w github PR GH11133.

4

Możesz dokonać wymiany, stosując się jako wykonaną here. Przykładem może być:

>>> import pandas as pd 
>>> a = pd.DataFrame([{"letter":"a", "number":"1"},{"letter":"b", "number":"2"}]) 
>>> a.dtypes 
letter object 
number object 
dtype: object 
>>> b = a.apply(pd.to_numeric, errors="ignore") 
>>> b.dtypes 
letter object 
number  int64 
dtype: object 
>>> 

Ale to jest do bani na dwa sposoby:

  1. Musisz użyć zastosować zamiast nienatywnej metody dataframe
  2. Trzeba skopiować do innego dataframe-- nie można tego zrobić na miejscu. Tyle do wykorzystania z "dużymi danymi".

Nie podoba mi się kierunek, w jakim zmierzają pandy. Nie używałem R data.table dużo, ale jak dotąd wydaje się lepsze.

Myślę, że tabela danych z natywną konwersją typu w miejscu jest dość podstawowa dla konkurencyjnego środowiska analizy danych.

0

można dostać to, aby zastosować poprawnie do konkretnej nazwy zmiennej w dataframe bez konieczności kopiowania do innej dataframe jak ten:

>>> import pandas as pd 
>>> a = pd.DataFrame([{"letter":"a", "number":"1"},{"letter":"b", "number":"2"}]) 
>>> a.dtypes 
letter object 
number object 
dtype: object 
>>> a['number'] = a['number'].apply(pd.to_numeric, errors='coerce') 
>>> a.dtypes 
letter object 
number  int64 
dtype: object 

Przykładem na podstawie pierwotnego pytania powyżej byłoby coś takiego:

data['S1Q2I'] = data['S1Q2I'].apply(pd.to_numeric, errors='coerce') 

To działa tak samo jak oryginał:

data['S1Q2I'] = data['S1Q2I'].convert_objects(convert_numeric=True) 

w moich rękach, w każdym razie ....

Nie odnosi się to do punktu, w którym powstają dane o wnioskach, które są nieco ponad moją głową, obawiam się!

+0

Ahh Właśnie czytałem dyskusję [tutaj] (https://github.com/pandas-dev/pandas/issues/11221) i doceniam ograniczenia, teraz. Najbardziej irytujące. Ale jeśli masz konkretną kolumnę danych, którą chcesz przekonwertować, możesz to zrobić. – magsmanston

2

To zależy od wersji Pandy ...... jeśli masz wersję Pandas 0.18.0 tego typu będzie działać ........

df['col name'] = df['col name'].apply(pd.to_numeric, errors='coerce') 

kolejne wersje ........

df['col name']=df.col name .astype(float)