2017-03-09 12 views
1

私は、SASの背景から来たPythonを学びたいと思っています。
私はSASデータセットをインポートしました。私が気づいたのは、SASの日付として複数の日付列があることでした(私は信じています)。 は周りを探して、私はこれを実行する方法を説明したリンク(here)を見つけ、次のようPandas - 複数の列でSAS datetimeを変換する

コードは次のとおりです。

alldata['DateFirstOnsite'] = pd.to_timedelta(alldata.DateFirstOnsite, unit='s') + pd.datetime(1960, 1, 1) 

はしかし、私は複数の列のためにこれを行う方法を思ったんだけど。このコード行を複数回繰り返すのではなく、複数の日付フィールドがある場合は、フィールドのリストを作成して、そのフィールドのリストでこのコードを実行できますか?それはどうですか?私が正しくあなたの質問を読んでいる場合、事前

答えて

0

はい、リストを作成してそのリストを繰り返して、SASの日付フィールドをpandas datetimeに変換することは可能です。しかし、SASの日付フィールドが1960/01/01以降の秒数で表されていない限り、to_timedeltaメソッドを使用する理由はわかりません。あなたがto_timedeltaメソッドを使用する予定の場合は、お使いのdfとあなたのフィールドをとる関数を作成し、あなたの関数にこれら二つを渡して、その単純ケース:

def convert_SAS_to_datetime(df, field): 
    df[field] = pd.to_timedelta(df[field], unit='s') + pd.datetime(1960, 1, 1) 
    return df 

さて、あなたはフィールドのリストを持っていると仮定してみましょう

:これらのフィールドや機能へのあなたのDFを通過させながら

my_list = ['field1','field2','field3','field4','field5'] 
my_df = pd.read_sas('mySASfile.sas7bdat') # your SAS data that's converted to a pandas DF 

あなたは今forループであなたのリストを反復処理することができます:あなたは(あなたのDFと一緒に)日時フィールドに変換する必要があります知っています210

for field in my_list: 
    my_df = convert_SAS_to_datetime(my_df, field) 

ここでは、to_datetimeメソッドを使用することをお勧めしますが、これは日付フィールドのSASフォーマットが何であるかを知っていることを前提としています。

01Jan2016 # date9 format

これは、日付の変換の指示を決定するために、ドキュメントhereを調べなければならない場合があります。 date9形式の場合は、次を使用できます。

df[field] = pd.to_datetime(df[date9field], format="%d%b%Y") 
+0

これはうまくいった。助けてくれてありがとう! – BPC

0

おかげで、あなたは複数の列にコードを適用したいですか?

alldata[['col1','col2','col3']] = 'your_code_here'

Exmaple:

import pandas as pd 
import numpy as np 
df = pd.DataFrame({'A' : [np.NaN,np.NaN,3,4,5,5,3,1,5,np.NaN], 
        'B' : [1,0,3,5,0,0,np.NaN,9,0,0], 
        'C' : ['Pharmacy of IDAHO','Access medicare arkansas','NJ Pharmacy','Idaho Rx','CA Herbals','Florida Pharma','AK RX','Ohio Drugs','PA Rx','USA Pharma'], 
        'D' : [123456,123456,1234567,12345678,12345,12345,12345678,123456789,1234567,np.NaN], 
        'E' : ['Assign','Unassign','Assign','Ugly','Appreciate','Undo','Assign','Unicycle','Assign','Unicorn',]}) 

df[['E', 'D']] = 1 # <---- notice double brackets 
print(df) 

    A B       C D E 
0 NaN 1.0   Pharmacy of IDAHO 1 1 
1 NaN 0.0 Access medicare arkansas 1 1 
2 3.0 3.0    NJ Pharmacy 1 1 
3 4.0 5.0     Idaho Rx 1 1 
4 5.0 0.0    CA Herbals 1 1 
5 5.0 0.0   Florida Pharma 1 1 
6 3.0 NaN      AK RX 1 1 
7 1.0 9.0    Ohio Drugs 1 1 
8 5.0 0.0      PA Rx 1 1 
9 NaN 0.0    USA Pharma 1 1 

お知らせ初めに二重括弧その簡単な操作を行うためには、これを行います。お役に立てれば!

+0

ありがとうMattR。私が探していたものではありませんでしたが、以下の回答は素晴らしいものでした。お手伝いをしてくれてありがとう。 – BPC

関連する問題