Pandas: "cannot convert the series to <class 'int'>" przy dodawaniu kolumny

0

Hej,
Prośba o pomoc. Mam następujący problem:

mam obiekt df typu DataFrame a w nim kolumnę TIMESTAMP
chcę dodać do df kolumnę TIME z wartościami sformatowanymi z TIMESTAMP

def timestamp2string(ts):
tz = get_localzone()
return datetime.fromtimestamp(ts/1000, tz).strftime('%Y-%m-%d %H:%M:%S')

df['TIME'] = timestamp2string(df['TIMESTAMP'])

Dostaję komunikat: "cannot convert the series to <class 'int'>"

3

I czego dokładnie nie rozumiesz? Zgaduje że nie wolno zrobić ts/1000 bo ts to jakis obiekt a nie liczba. Weźmy dzisiejszą datę i podzielmy ją na 2 - co to znaczy? Jakiego wyniku byś się spodziewał?

0

Dobra, zapomniałem dodać, że wartość timestamp jest w milisekundach, stąd dzielenie przez 1000

0

Dobra, zapomniałem dodać, że wartość timestamp jest w milisekundach, stąd dzielenie przez 1000

Nie jest, skoro dostajesz taki błąd. To że możesz zrobić print i reprezentacja obiektu jako string wypisuje liczbę o niczym nie świadczy.

Chyba że błąd jest w zupełnie innym miejscu w kodzie którego nie pokazałeś. Błąd mimo to jest dość jasny -> masz obiekt time series a próbujesz użyć go w miejscu gdzie oczekiwany jest int.

0

Kolumna jest typu int

dft.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 500 entries, 0 to 499
Data columns (total 1 columns):

Column Non-Null Count Dtype


0 TIMESTAMP 500 non-null int64
dtypes: int64(1)
memory usage: 4.0 KB

1
dxxk napisał(a):

Kolumna jest typu int

Wrzucasz do tej funkcji całą kolumnę i stąd problem, nie zamieniasz milisekund na sekundy tylko kolumnę z milisekundami na kolumnę z sekundami - tak czy owak datetime.fromtimestamp sobie z tym nie poradzi.

Co innego, gdybyś operował na tych kolumnach i np. użył datetime.fromtimestamp by przekształcić poszczególne wartości:

>>> import pandas as pd
>>> df = pd.DataFrame({"a": [10000.0, 300.0, 1200.0]})
>>> df['b'] = df['a'] / 1000
>>> df
         a     b
0  10000.0  10.0
1    300.0   0.3
2   1200.0   1.2
>>> def foo(x):
...   return x * 2
... 
>>> df['c'] = df['b'].apply(foo)
>>> df
         a     b     c
0  10000.0  10.0  20.0
1    300.0   0.3   0.6
2   1200.0   1.2   2.4
>>> 

0

Super. Dziękuję bardzo :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1