Python pandas.to_datetime:选择哪种格式?

Python pandas.to_datetime:选择哪种格式?,python,python-2.7,datetime,pandas,datetime-format,Python,Python 2.7,Datetime,Pandas,Datetime Format,我有这样一个.csv文件: “日期”、“时间”、“打开”、“高”、“低”、“关闭”、“音量” 12/30/2002,0930,0.94,0.94,0.94,0.94,571466 我想用pandas.to_datetime模块转换“Time”列值,但找不到正确的格式,因为小时和分钟之间没有分隔符 有人能帮我吗?这应该行得通,但我不确定是否有更好的方法: from StringIO import StringIO fh = StringIO('''"Date","Time","Open","H

我有这样一个.csv文件:

“日期”、“时间”、“打开”、“高”、“低”、“关闭”、“音量”
12/30/2002,0930,0.94,0.94,0.94,0.94,571466
我想用pandas.to_datetime模块转换“Time”列值,但找不到正确的格式,因为小时和分钟之间没有分隔符


有人能帮我吗?

这应该行得通,但我不确定是否有更好的方法:

from StringIO import StringIO

fh = StringIO('''"Date","Time","Open","High","Low","Close","Volume"
12/30/2002,0930,0.94,0.94,0.94,0.94,571466''')

df = pd.read_csv(fh, dtype={'Time':object})
df['Timestamp'] = pd.to_datetime(df['Date'] + ' ' + df['Time'])

print df
输出:

         Date  Time  Open  High   Low  Close  Volume           Timestamp
0  12/30/2002  0930  0.94  0.94  0.94   0.94  571466 2002-12-30 09:30:00

通过指定日期的格式,可以告诉pandas没有分隔符<代码>%H%M告诉python您有一个没有分隔符的时间。例如,如果您有一个分隔符
,那么您将使用
格式=“%H:%M”

假设您已经加载了所有内容,并且您的数据帧作为
df
加载

from pandas import pandas

# file loading and such

asset['Date'] = pandas.to_datetime(asset['Date'])
asset['Time'] = pandas.DatetimeIndex(pandas.to_datetime(asset['Time'], format = '%H%M')).time
我会给你

        Date      Time  Open  High   Low  Close  Volume
0 2002-12-30  09:30:00  0.94  0.94  0.94   0.94  571466
         Date      Time  Open  High   Low  Close  Volume
0  12/30/2002  09:30:00  0.94  0.94  0.94   0.94  571466 
对于Python 3人:

df['Time'] =  pd.to_datetime(df['Time'], format='%H%M').dt.time
我会给你

        Date      Time  Open  High   Low  Close  Volume
0 2002-12-30  09:30:00  0.94  0.94  0.94   0.94  571466
         Date      Time  Open  High   Low  Close  Volume
0  12/30/2002  09:30:00  0.94  0.94  0.94   0.94  571466 

通过将列表列表传递给
parse_dates
param,可以将要解析的列列表作为完整的
datetime
传递:

In [6]:
import io
import pandas as pd
t='''"Date","Time","Open","High","Low","Close","Volume"
12/30/2002,0930,0.94,0.94,0.94,0.94,571466'''
df = pd.read_csv(io.StringIO(t), parse_dates=[['Date','Time']], keep_date_col=True)
df

Out[6]:
            Date_Time        Date  Time  Open  High   Low  Close  Volume
0 2002-12-30 09:30:00  12/30/2002  0930  0.94  0.94  0.94   0.94  571466
您可以看到
d类型与预期的一样:

In [7]:    
df.info()

<class 'pandas.core.frame.DataFrame'>
RangeIndex: 1 entries, 0 to 0
Data columns (total 8 columns):
Date_Time    1 non-null datetime64[ns]
Date         1 non-null object
Time         1 non-null object
Open         1 non-null float64
High         1 non-null float64
Low          1 non-null float64
Close        1 non-null float64
Volume       1 non-null int64
dtypes: datetime64[ns](1), float64(4), int64(1), object(2)
memory usage: 144.0+ bytes
[7]中的

df.info()
范围索引:1个条目,0到0
数据列(共8列):
日期\时间1非空datetime64[ns]
日期1非空对象
时间1非空对象
打开1个非空浮点64
高1非空浮点64
低1非空浮点64
关闭1个非空浮点64
卷1非空int64
数据类型:datetime64[ns](1)、float64(4)、int64(1)、object(2)
内存使用:144.0+字节

您可能应该提及您已经尝试过的内容。包括代码。这是一个可以通过阅读适当的documentation@goncalopp我阅读了所有可用格式的文档,但找不到合适的格式,因为我的数据没有小时和分钟的分隔符。我试图用pandas.to_datetime模块转换它,但没有指定任何格式,但它自动将一个通用日期与一个完全错误的时间放在一起。你抢先回答了我——我做了几乎完全相同的事情,我不明白。您正在使用字符串创建数据帧,但对我来说,“Date”是一个包含数千个值(行)的数组(列)。如何在fh中放置数组而不是字符串?@ilpomo,我的
fh
将替换我没有的csv输入文件。您只需执行
df=pd.read_csv('/path/to/your/csvfile',dtype={'Time':object})
,…哦,谢谢!为什么要使用dtype={'Time':object}?我必须为每一列指定数据类型吗?如果不是,则
time
将是
int
类型(推断),而
0930
将成为
930
。我的代码有点不同。>数据加载资产=pandas.DataFrame(pandas.read_csv('file_path/%s'%symbol,sep=',','decimal='))>列转换资产['Date']=pandas.to_日期时间(资产['Date'])资产['Time']=pandas.to_日期时间(资产['Time'],格式='%H%M')为什么在末尾使用.dt时间?如果复制您的代码,Spyder IDE将返回错误“'Series'对象没有'datetime'属性”。无论如何,您的代码仍然将通用日期应用于我的“时间”列(1900-01-01 09:30:00)。啊!我已经为您提供了Python3解决方案。我将.dt.time放在末尾,以便只占用时间,而不在“时间”列中添加一般日期。你能改为使用asset['Time']=pandas.DatetimeIndex(pandas.to_datetime(asset['Time'],格式='%H%M')).Time吗?我已经更新了我的解决方案,使之同时具有两个python版本的解决方案。