今天,我非常惊讶地发现,当从数据文件读取数据时(例如),熊猫能够识别值的类型:
df = pandas.read_csv('test.dat', delimiter=r"\s+", names=['col1','col2','col3'])
例如,可以这样检查:
for i, r in df.iterrows():
print type(r['col1']), type(r['col2']), type(r['col3'])
特别是整数、浮点数和字符串被正确识别。但是,我有一列的日期格式如下:2013-6-4。这些日期被识别为字符串(而不是python date-objects)。
加载csv文件时包含日期列。我们有两种方法来制作熊猫
识别日期列,即
熊猫显式识别格式通过arg date_parser=mydateparser
Pandas隐式识别agr infer_datetime_format=True的格式
一些日期列数据
01/01/18
01/02/18
这里我们不知道前两件事,可能是月,也可能是日。在这种情况下,我们要用
方法1:
显式传递格式
mydateparser = lambda x: pd.datetime.strptime(x, "%m/%d/%y")
df = pd.read_csv(file_name, parse_dates=['date_col_name'],
date_parser=mydateparser)
方法2:—隐式或自动识别格式
df = pd.read_csv(file_name, parse_dates=[date_col_name],infer_datetime_format=True)
当将两个列合并为单个datetime列时,接受的答案将生成一个错误(pandas版本0.20.3),因为列分别发送给date_parser函数。
以下工作:
def dateparse(d,t):
dt = d + " " + t
return pd.datetime.strptime(dt, '%d/%m/%Y %H:%M:%S')
df = pd.read_csv(infile, parse_dates={'datetime': ['date', 'time']}, date_parser=dateparse)
你应该在读取时添加parse_dates=True,或者parse_dates=['列名'],这通常足以神奇地解析它。但是总有一些奇怪的格式需要手动定义。在这种情况下,还可以添加日期解析器函数,这是最灵活的方法。
假设你的字符串有一个列'datetime',那么:
from datetime import datetime
dateparse = lambda x: datetime.strptime(x, '%Y-%m-%d %H:%M:%S')
df = pd.read_csv(infile, parse_dates=['datetime'], date_parser=dateparse)
通过这种方式,你甚至可以将多个列合并到一个datetime列中,这将'date'和'time'列合并到一个'datetime'列中:
dateparse = lambda x: datetime.strptime(x, '%Y-%m-%d %H:%M:%S')
df = pd.read_csv(infile, parse_dates={'datetime': ['date', 'time']}, date_parser=dateparse)
你可以在本页找到strptime和strftime的指令(即用于不同格式的字母)。
分别以日期和时间格式读取现有字符串列
pd.read_csv('CGMData.csv', parse_dates=['Date', 'Time'])
结果列
连接日期和时间的字符串列,并添加datetype对象的新列-删除原始列
如果要重命名新列名,则将字典作为
如下面的例子所示,新的列名将是键名,
如果作为列的列表传递,新的列名将是列表中传递的列名的组合,以_例如Date_Time分隔
# parse_dates={'given_name': ['Date', 'Time']}
pd.read_csv("InsulinData.csv",low_memory=False,
parse_dates=[['Date', 'Time']])
pd.read_csv("InsulinData.csv",low_memory=False,
parse_dates={'date_time': ['Date', 'Time']})
连接日期和时间的字符串列,并添加datetype对象的新列和保留原始列
pd.read_csv("InsulinData.csv",low_memory=False,
parse_dates=[['Date', 'Time']], keep_date_col=True)
想要更改从csv读取的日期和时间的格式
parser = lambda x: pd.to_datetime(x, format='%Y-%m-%d %H:%M:%S')
pd.read_csv('path', date_parser=parser, parse_dates=['date', 'time'])