GVKun编程网logo

Pandas-同一列中的不同时间格式(pandas两列时间相减)

4

本文将介绍Pandas-同一列中的不同时间格式的详细情况,特别是关于pandas两列时间相减的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于java

本文将介绍Pandas-同一列中的不同时间格式的详细情况,特别是关于pandas两列时间相减的相关信息。我们将通过案例分析、数据研究等多种方式,帮助您更全面地了解这个主题,同时也将涉及一些关于java 不同时间格式转化、Pandas / Python:根据另一列中的值设置一列的值、pandas 时间格式转换、Pandas:从数据透视表中的另一列中减去一列的知识。

本文目录一览:

Pandas-同一列中的不同时间格式(pandas两列时间相减)

Pandas-同一列中的不同时间格式(pandas两列时间相减)

我有一个数据框,其日期以不同的格式存储在同一列中,如下所示:

date1-10-20182-10-20183-Oct-20184-10-2018

无论如何,我可以使它们全部具有相同的格式。

答案1

小编典典

to_datetime与指定格式一起使用,errors=''coerce''用于将不匹配的值替换为NaN。最后combine_first用于按date2序列替换缺少的值。

date1 = pd.to_datetime(df[''date''], format=''%d-%m-%Y'', errors=''coerce'')date2 = pd.to_datetime(df[''date''], format=''%d-%b-%Y'', errors=''coerce'')df[''date''] = date1.combine_first(date2)print (df)        date0 2018-10-011 2018-10-022 2018-10-033 2018-10-04

java 不同时间格式转化

java 不同时间格式转化

 

今天项目中遇到一个格式问题,收到的timestamp格式是2019-08-19-16:03:21 , 但是入es时,当类型为date的时候,这种格式直接报错,因为索引建的格式是yyyy-MM-dd HH:mm:ss,即中间多了一个横杠。

 

解决思路,先把时间转化成Date类型,然后再把Date转成字符串的类型。

 

String --> Date 

/**
     *    @Title:         字符串转日期
     *    @MethodName:    parse 
     *    @Description:    
     *    @param             @param strDate
     *    @param             @param pattern
     *    @param             @return
     *    @return         Date
     *    @throws
     */
    public static Date parse(String strDate, String pattern) {
        SimpleDateFormat df = new SimpleDateFormat(pattern);
        try {
            return df.parse(strDate);
        } catch (ParseException e) {
            e.printStackTrace();
            return null;
        }
    }
View Code

 

Date --> String

/**
     *    @Title:         日期格式化
     *    @MethodName:    format 
     *    @Description:    
     *    @param             @param date
     *    @param             @param pattern
     *    @param             @return
     *    @return         String
     *    @throws
     */
    public static String format(Date date,String pattern){
        String rs = "";
        if(date!=null){
            SimpleDateFormat df = new SimpleDateFormat(pattern);
            rs = df.format(date);
        }
        return rs;
    }
View Code

 

转化的时候指定对应的pattern即可。

Pandas / Python:根据另一列中的值设置一列的值

Pandas / Python:根据另一列中的值设置一列的值

我需要基于Pandas数据框中的另一列的值来设置一列的值。这是逻辑:

if df['c1'] == 'Value':
    df['c2'] = 10
else:
    df['c2'] = df['c3']

我无法做到这一点,我想要做的就是简单地创建一个具有新值的列(或更改现有列的值:任何一个都对我有用)。

如果我尝试运行上面的代码,或者将其编写为函数并使用apply方法,则会得到以下信息:

ValueError: The truth value of a Series is ambiguous. Use a.empty,a.bool(),a.item(),a.any() or a.all().

pandas 时间格式转换

pandas 时间格式转换

 

OUTLINE  

常见的时间字符串与timestamp之间的转换

日期与timestamp之间的转换

常见的时间字符串与timestamp之间的转换

这里说的字符串不是一般意义上的字符串,是指在读取日期类型的数据时,如果还没有及时解析字符串,它就还不是日期类型,那么此时的字符串该怎么与时间戳之间进行转换呢?
① 时间字符串转化成时间戳将时间字符串转化成时间戳分为两步:
第一步:将时间字符串转换成时间元组
第二步:将时间元组转换成时间戳类型

import time
data[''timestamp''] = data[''OCC_TIM''].apply(lambda x:time.mktime(time.strptime(x,''%Y-%m-%d %H:%M:%S'')))

    1
    2

 



其中,strptime函数是将字符串按照后面的格式转换成时间元组类型;mktime函数则是将时间元组转换成时间戳。记住这两个常用函数。

② 将时间戳转换成可读字符串
第一步:用localtime将时间戳转换成local_time,时间元组
第二步:用strftime将local_time转换成可读字符串

timestamp = 1.521708e+09
time_local = time.localtime(timestamp)
time_local
# 输出:
# time.struct_time(tm_year=2018, tm_mon=3, tm_mday=22, tm_hour=16, tm_min=40, tm_sec=0, tm_wday=3, tm_yday=81, tm_isdst=0)

time.strftime(''%Y/%m/%d %H:%M:%S'',time_local)
# 输出:
# ''2018/03/22 16:40:00''

    1
    2
    3
    4
    5
    6
    7
    8
    9

 



日期与timestamp之间的转换

但是如果,你在读取数据的时候已经用了parse_dates这个参数,将可读的字符串换成了日期格式。那如何将日期转换成timestamp?

那么我们应该想的是如何将日期转换成时间元组!

import time
data[''timestamp''] = data[''OCC_TIM''].apply(lambda x:time.mktime(x.timetuple())) # 所以最重要的是  日期.timetuple() 这个用法 通过它将日期转换成时间元组
data.head(10)
# 输出:

    1
    2
    3
    4

 



 

 

Pandas:从数据透视表中的另一列中减去一列

Pandas:从数据透视表中的另一列中减去一列

我想从数据透视表的另一列中减去一列。2017年和2016年之间的差异应为’diff’

raw_data = {''year'': [2016,2016,2017,2017],    ''area'': [''A'',''B'',''A'',''B''],    ''age'': [10,12,50,52]}df1 = pd.DataFrame(raw_data, columns = [''year'',''area'',''age''])table=pd.pivot_table(df1,index=[''area''],columns=[''year''],values[''age''],aggfunc=''mean'')table[''diff'']=table[''2017'']-table[''2016'']

答案1

小编典典

你需要删除[]pivot_table为创建不要MultiIndex在列:

table=pd.pivot_table(df1,index=''area'',columns=''year'',values=''age'',aggfunc=''mean'')print (table)year  2016  2017area            A       10    50B       12    52table[''diff'']=table[2017]-table[2016]print (table)year  2016  2017  diffarea                  A       10    50    40B       12    52    40

另一个可能的解决方案是droplevel:

table=pd.pivot_table(df1,index=[''area''],columns=[''year''],values=[''age''],aggfunc=''mean'')table.columns = table.columns.droplevel(0)print (table)year  2016  2017area            A       10    50B       12    52

关于Pandas-同一列中的不同时间格式pandas两列时间相减的问题就给大家分享到这里,感谢你花时间阅读本站内容,更多关于java 不同时间格式转化、Pandas / Python:根据另一列中的值设置一列的值、pandas 时间格式转换、Pandas:从数据透视表中的另一列中减去一列等相关知识的信息别忘了在本站进行查找喔。

本文标签: