私は初心者でPythonを学んでいます。私は非常に大規模なデータセットを持っています - これをより速く実行するためにコードを最適化するのに問題があります。大規模なデータフレームでの日付減算の最適化 - パンダ
私の目標は、(私の現在のコードはなく、遅い動作します)、このすべてを最適化することである。その減算の結果と新しい列を作成します
減算2つの日付の列
元の2列を削除する
すべてを高速で実行します
ランダム見つかっ: はメソッド読み込む初期ファイルを変更することを考える... https://softwarerecs.stackexchange.com/questions/7463/fastest-python-library-to-read-a-csv-file
私が持っているparse_dates = CSVファイルを読み込むときに真 - そう、これは減速だろうか?私は50以上の列を持っていますが、1つのタイムスタンプ列と1年間の列しかありません。
このコラム:
(これは1996年1月1日のような形式に変換する必要があります?)を差し引い saledate
1 3/26/2004 0:00
2 2/26/2004 0:00
3 5/19/2011 0:00
4 7/23/2009 0:00
5 12/18/2008 0:00
:
YearMade
1 1996
2 2001
3 2001
4 2007
5 2004
現在のコード:
mean_YearMade = dfx[dfx['YearMade'] > 1000]['YearMade'].mean()
def age_at_sale(df, mean_YearMade):
'''
INPUT: Dateframe
OUTPUT: Dataframe
Add a column called AgeSale
'''
df.loc[:, 'YearMade'][df['YearMade'] == 1000] = mean_YearMade
# Column has tons of erroneous years with 1000
df['saledate'] = pd.to_datetime(df['saledate'])
df['saleyear'] = df['saledate'].dt.year
df['Age_at_Sale'] = df['saleyear'] - df['YearMade']
df = df.drop('saledate', axis=1)
df = df.drop('YearMade', axis=1)
df = df.drop('saleyear', axis=1)
return df
どんな最適化のトリックも大いに評価されるでしょう...
あなただけの一年と最大効率を気にしている場合、年に読むために速くなり作られ、今年は整数として販売して日時を避けるため、一般的にはそれが適切なパンダの日付時刻と日付時刻を運ぶために良いでしょう話します。しかし、ここで効率をあまりにも一般化するのは、テストするサンプルデータなしでは難しいです。 – JohnE
saledateとYearMadeは実際のデータです - それを考えると500,000行になります。年間で作られた年と年が整数で売られていることはどういう意味ですか?私はsaledateを最初に文字列として変換し、各ラフをループし、年を除いてすべてを切り取り、次にintに変換しなければならないと言っていますか?次に、通常の年形式(1995年)の他の列等。)? – jhub1
基本的にええ。理想的には4年間の列を整数として読み込み、すべての日時オーバーヘッドを保存します。しかし、それはあなたがこのCSVを何度も読んでいるということです。一度に読み込んでHDFなどで保存しているのであれば、おそらくdatetimeとして保存するのが理にかなっています(ただし、年自体を整数として保存すると速度は向上するかもしれませんが、どれくらいの頻度であるかわかりません)。これはすべて実際にあなたの特定のケースに依存し、あなただけが最良の方法を決めることができます。 – JohnE