Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.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 2.7 如何根据熊猫中两列的时差创建新列?_Python 2.7_Pandas_Dataframe - Fatal编程技术网

Python 2.7 如何根据熊猫中两列的时差创建新列?

Python 2.7 如何根据熊猫中两列的时差创建新列?,python-2.7,pandas,dataframe,Python 2.7,Pandas,Dataframe,我有一个包含时间x和时间y的数据帧,格式如下: # 2015-10-01 23:59:59.997 %Y-%m-%d %H:%M:%S.%f 我不能只是: df['TimeDiff'] = datetime.strptime(df['Time_x'], '%Y-%m-%d %H:%M:%S.%f') - \ datetime.strptime(df['Time_y'], '%Y-%m-%d %H:%M:%S.%f') 我不能这样做以返回差异: # Defin

我有一个包含时间x和时间y的数据帧,格式如下:

# 2015-10-01 23:59:59.997
%Y-%m-%d %H:%M:%S.%f
我不能只是:

df['TimeDiff'] = datetime.strptime(df['Time_x'], '%Y-%m-%d %H:%M:%S.%f') - \
                 datetime.strptime(df['Time_y'], '%Y-%m-%d %H:%M:%S.%f')
我不能这样做以返回差异:

# Defining a function to call with Pandas to apply()
def time_difference(a):
    Time_x, Time_y = a
    c = datetime.strptime(Time_x, '%Y-%m-%d %H:%M:%S.%f') - datetime.strptime(Time_y, '%Y-%m-%d %H:%M:%S.%f')

    if c.days < 1:
        if c.minute <= 15:
            return c.minute
        else:
            return c.days
    else:
        None

# Creating a new column using my function.
# Error: “Too many values to unpack” Exception
df['TimeDiff'] = df[['Time_x', 'Time_y']].apply(time_difference)
#使用Pandas to apply()定义要调用的函数
def时间差(a):
时间x,时间y=a
c=datetime.strTime(时间x,%Y-%m-%d%H:%m:%S.%f')-datetime.strTime(时间Y,%Y-%m-%d%H:%m:%S.%f'))
如果c.天<1:

如果c.minuteIIUC,并且您正在从csv文件读取数据,如下所示:

time_x,time_y
2015-10-01 23:59:59.997,2015-10-01 23:58:59.997
2015-10-01 23:57:59.997,2015-10-01 23:59:59.997
我会阅读并解析日期:

df = pd.read_csv('yourfile.csv', parse_dates=['time_x','time_y'])
因此,您可以在以后申请:

df['TimeDiff'] = (df['time_x'] - df['time_y']).dt.seconds
返回:

                   time_x                  time_y  TimeDiff
0 2015-10-01 23:59:59.997 2015-10-01 23:58:59.997        60
1 2015-10-01 23:57:59.997 2015-10-01 23:59:59.997     86280

通过这种方式,您可以指定所需的时间单位(
dt.hour
dt.minute
等)。

仅供参考,我正在使用pd.read\u csv从csv读取数据。df.info()显示:Time_x和Time_y为对象。使用parse_dates后,我将Time_x视为datetime64[ns]。令人惊叹的!看起来不错!性能降低了(在我的df中有超过1M行),但我认为这是因为数据类型以日期和对象的形式存储了更多的数据。我还忘了提到时间x,时间y是pd.merge的结果。我分析了原始数据上的日期,合并自动复制了数据类型。我现在假设,我可以在merge上使用相同的时差逻辑来过滤以秒为单位的时差,以减少df大小。