从Dataframe到Datestamp python3

时间:2018-06-26 13:48:22

标签: python-3.x pandas dataframe timestamp

最近,我遇到了一个非常奇怪的csv文件,其中包含2列(带有标题),其中一个用于日期,第二个用于价格。时间格式为“ dd.mm.yyyy”。

d = {'Date': [31.12.1991, 02.01.1992, 03.01.1992, 06.01.1992], 
     'Prices': [9.62, 9.5, 9.73, 9.45]}
df = pd.DataFrame(data=d)
prices = pd.DataFrame(df['Prices'])
date = pd.DataFrame(df['Date'])
date = date.to_string(header=True)
date = df.to_datetime(utc=True, infer_datetime_format=True)
frame = date.join(values)
print(df)

我试图通过隔离date列,然后尝试先使用to_string()函数将其转换为字符串,然后使用to_datetime返回到日期来使其工作,但这没有用。

有什么建议吗? 预先感谢

3 个答案:

答案 0 :(得分:5)

对整个数据框进行概括的有趣方式

注意:此操作使用errors='ignore'来跳过可能不适合作为日期解析的列。但是,要权衡的是,如果有一个列打算被解析为日期,但具有错误的日期值,则此方法将使该列保持不变。关键是要确保您没有错误的日期值。

df.assign(
    **df.select_dtypes(exclude=[np.number]).apply(
        pd.to_datetime, errors='ignore', dayfirst=True
    )
)

        Date  Prices
0 1991-12-31    9.62
1 1992-01-02    9.50
2 1992-01-03    9.73
3 1992-01-06    9.45

另一个例子

df = pd.DataFrame(dict(
    A=1, B='B', C='6.7.2018', D=1-1j,
    E='1.2.2017', F=pd.Timestamp('2016-08-08')
), [0])

df

   A  B         C       D         E          F
0  1  B  6.7.2018  (1-1j)  1.2.2017 2016-08-08

df.assign(
    **df.select_dtypes(exclude=[np.number]).apply(
        pd.to_datetime, errors='ignore', dayfirst=True
    )
)

   A  B          C       D          E          F
0  1  B 2018-07-06  (1-1j) 2017-02-01 2016-08-08

设置

从jezrael借来的

d = {'Date': ['31.12.1991', '02.01.1992', '03.01.1992', '06.01.1992'], 
     'Prices': [9.62, 9.5, 9.73, 9.45]}
df = pd.DataFrame(data=d)

答案 1 :(得分:3)

我认为需要:

d = {'Date': ['31.12.1991', '02.01.1992', '03.01.1992', '06.01.1992'], 
     'Prices': [9.62, 9.5, 9.73, 9.45]}
df = pd.DataFrame(data=d)

df['Date'] = pd.to_datetime(df['Date'], dayfirst=True)
print (df)
        Date  Prices
0 1991-12-31    9.62
1 1992-01-02    9.50
2 1992-01-03    9.73
3 1992-01-06    9.45

答案 2 :(得分:3)

您可以在读取文件时尝试解析日期。您可以指定格式为第一天而不是月份。

import pandas as pd
df = pd.read_csv('test.csv', parse_dates=['Date'], dayfirst=True)

print(df)
#        Date   Prices
#0 1991-12-31     9.62
#1 1992-01-02     9.50
#2 1992-01-03     9.73
#3 1992-01-06     9.45

df.dtypes
#Date      datetime64[ns]
#Prices           float64
#dtype: object

但是,您的数据确实需要清洁和正确格式化才能起作用:

  

parse_dates:

     
      
  • 如果列或索引包含不可解析的日期,请整列   或索引将按原样返回为对象数据类型。对于   非标准日期时间解析,请在pd.read_csv之后使用pd.to_datetime
  •   

样本数据:test.csv

Date,Prices
31.12.1991,9.62
02.01.1992,9.5
03.01.1992,9.73
06.01.1992,9.45