私はpython 3.5.2、pandas 0.18.1、sqlite3を使っています。私のデータベースでUNIXタイムスタンプをpandas.tslib.Timestampとシリーズの日時を変換する
1970は、理想的には私はsqliteのから私のデータフレームを読み、[unix_time
列のdatetime
またはpandas.tslib.Timestamp
変換に対応するtime
列を作成するために、私は秒間INT
でカラムunix_time
を持っています私はいくつかの処理にしか使用せず、データフレームを保存する前にドロップします。
df = pd.read_from_sql_query("SELECT * FROM test", con, parse_dates=['unix_time'])
私は私の処理のための罰金ですpandas.tslib.Timestamp
種類を取得、その後私は使用して私の元unix_time
列を再作成する必要があります:
問題が使っunix_time
列をを解析するときということです
df['unix_time'][i] = (df['unix_time'][i] - datetime(1970,1,1)).total_seconds()
実際に「汚れている」
最初の質問:より良い方法がありますか?
私はUNIXの時刻形式を放棄し、事実のみpandas.tslib.Timestamp
でパンダのリターンからdatetime
フォーマットが、to_datetime
メソッドを使用して...とにかく、そうすることが悪いソリューションであるすべての行を反復処理するために私を強制する考えました。私の最後の試みを直接使用していた、それはシリーズでそれを適用することが可能である
:?(データフレーム
2番目の質問の単一セルの景色よりも、何か他のものにto_datetime
を適用することは不可能です。df['time'] = datetime.datetime.fromtimestamp(df['unix_time'])
しかし驚くべきことに、それはまたpandas.tslib.Timestamp
を返し
を最後に、私は唯一のUNIXタイムスタンプまたは日付時刻を保存することができますことを知って、今のところ私の唯一の選択肢は次のとおりです。
を解析してから、それをunixタイムスタンプに戻す必要があります。 です。
または解析しないでください。 を順番に変換する必要があります。
シリーズ全体を変換できれば素晴らしいと思います。
最後の質問:UNIXタイムスタンプにdatetime
(または少なくともpandas.tslib.Timestamp
)にUNIXタイムスタンプシリーズを変換する方法、またはpandas.tslib.Timestamp
(またはdatetime
)シリーズがありますか?
おかげ
EDIT:私の処理中に、私は私が私のデータセットに追加したい行を抽出 。セリエへのデータフレームから渡すときどうやら、pandas.tslib.Timestamp
にcoversionは、暗黙のうちに追加されます
df = pd.DataFrame({'UNX':pd.date_range('2016-01-01', freq='9999S', periods=10).astype(np.int64)//10**9})
df['Date'] = pd.to_datetime(df.UNX, unit='s')
print(df.Date.dtypes)
print(type(df['Date'][0]))
test = df.iloc[0]
print(type(test.Date))
new_df = test.to_frame().transpose() #from here, impossible to do : new_df.to_sql("test", con) because the type for 'Date' is not supported
print(new_df.Date.dtypes)
戻り
datetime64[ns]
<class 'pandas.tslib.Timestamp'>
<class 'pandas.tslib.Timestamp'>
object
をdatetime64[ns]
またはdatetime.datetime
にpandas.tslib.Timestamp
からnew_df
で「日付」を変換する方法はあります(または単純にstr
)?
明確化のおかげで、それは私が問題がある場所をより正確に見るのを助けました。実際には、この方法ですべてが正常に動作します。私はタイプが混乱するところを示すために私の質問を編集します。 – amougel