Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在多个列中转换SAS日期时间_Python_Datetime - Fatal编程技术网

Python 在多个列中转换SAS日期时间

Python 在多个列中转换SAS日期时间,python,datetime,Python,Datetime,我正试图学习Python,来自SAS背景。 我导入了一个SAS数据集,我注意到有多个日期列作为SAS日期(我相信)。 环顾四周,我发现了一个链接,它解释了如何执行此()操作: 代码如下: alldata['DateFirstOnsite'] = pd.to_timedelta(alldata.DateFirstOnsite, unit='s') + pd.datetime(1960, 1, 1) 但是,我想知道如何对多个列执行此操作。如果我有多个日期字段,而不是重复这行代码多次,我可以创建一个

我正试图学习Python,来自SAS背景。
我导入了一个SAS数据集,我注意到有多个日期列作为SAS日期(我相信)。 环顾四周,我发现了一个链接,它解释了如何执行此()操作:

代码如下:

alldata['DateFirstOnsite'] = pd.to_timedelta(alldata.DateFirstOnsite, unit='s') + pd.datetime(1960, 1, 1)
但是,我想知道如何对多个列执行此操作。如果我有多个日期字段,而不是重复这行代码多次,我可以创建一个字段列表,然后在该字段列表上运行此代码吗?这是怎么做到的


提前感谢

如果我正确阅读了您的问题,您想将代码应用于多列吗?要做到这一点,请执行以下操作:

alldata['col1'、'col2'、'col3']='your\u code\u 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
将熊猫作为pd导入
将numpy作为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’:[‘爱达荷州药房’、‘阿肯色州医疗保险’、‘NJ药房’、‘爱达荷Rx’、‘CA草药’、‘佛罗里达制药’、‘AKRX’、‘俄亥俄州药品’、‘PA Rx’、‘美国制药’],
“D”:[1234561234567123456712345678234567891234567,np.NaN],
‘E’:[‘分配’、‘取消分配’、‘分配’、‘丑陋’、‘欣赏’、‘撤销’、‘分配’、‘独轮车’、‘分配’、‘独角兽’、]}

df[['E','D']]=1 35;是的,可以创建一个列表并遍历该列表以将SAS日期字段转换为datetime。但是,我不确定为什么要使用
to_timedelta
方法,除非SAS日期字段在1960/01/01之后用秒表示。如果您计划使用
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
for field in my_list:
    my_df = convert_SAS_to_datetime(my_df, field)
现在,假设您有一个字段列表,您知道这些字段应该转换为datetime字段(以及df):

现在,您可以使用
for
循环遍历列表,同时将这些字段和df传递给函数:

def convert_SAS_to_datetime(df, field):
    df[field] = pd.to_timedelta(df[field], unit='s') + pd.datetime(1960, 1, 1)
    return df
for field in my_list:
    my_df = convert_SAS_to_datetime(my_df, field)
现在,我推荐的另一种方法是使用该方法,但这假设您知道日期字段的SAS格式

e、 g.
2016年1月1日#日期9格式

此时,您可能需要查看文档以确定转换日期的指令。如果是
date9
格式,则可以使用:

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

谢谢你,马特。不完全是我想要的,但是下面的回复非常有效。谢谢你花时间帮忙。