【发布时间】:2019-10-31 00:42:22
【问题描述】:
我有一个 csv 文档,下面是一个例子:
oci,citing,cited,creation,timespan,journal_sc,author_sc
0200100000236252421370109080537010700020300040001-020010000073609070863016304060103630305070563074902,"10.1002/pol.1985.170230401","10.1007/978-1-4613-3575-7_2",1985-04,P2Y,no,no
有 2 列,代表日期,我想将列类型从字符串更改为 datetime 格式。
creation列(字符串)为创建日期,除不指定外还可以三种形式表示:
- “yyyy-mm-dd”(例如“2019-09-20”)
- “yyyy-mm”(例如“2019-09”)
- “yyyy”(例如“2019”)
列timespan(字符串):按照PnYnMnD的形式表示,其中P是表达式开头的文字值,nY是后面跟文字Y的年数, nM 是后跟文字 M 的月数,nD 是后跟文字 D 的天数,如果这些数字和相应的指示符等于 0,则它们中的任何一个都可能不存在. 减号可能会出现在P 之前,表示负持续时间。
我正在尝试使用pd.to_datetime() 函数将列类型从字符串更改为datetime 格式:
def do_process(f_path):
global my_ocan
my_ocan = pd.read_csv(f_path, names=['oci', 'citing', 'cited', 'creation', 'timespan', 'journal_sc', 'author_sc'], parse_dates = ['creation', 'timespan'])
my_ocan['timespan'] = pd.to_datetime(my_ocan['timespan'], format='%Y%m%d', errors='ignore', yearfirst=True)
my_ocan['creation'] = pd.to_datetime(my_ocan['creation'], format='%Y%m%d', errors='ignore', yearfirst=True)
#print(my_ocan['citing'])
print(my_ocan.info())
return my_ocan
执行print(my_ocan.info()) 时,我得到'214 non-null object' 而不是datetime。我错过了什么?有什么问题?
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 214 entries, 0 to 213
Data columns (total 7 columns):
oci 214 non-null object
citing 214 non-null object
cited 214 non-null object
creation 214 non-null object
timespan 214 non-null object
journal_sc 214 non-null object
author_sc 214 non-null object
dtypes: object(7)
谢谢你们,祝你们有美好的一天:)
【问题讨论】:
-
问题是“创作”列的多种输入。它尝试将其转换为 datetime 类型,但由于传入的值不同,它不能。它将其转换为对象。您可以将列转换回日期时间,但它会删除您的值。您可以使用
myocan.astype({'creation': 'datetime64[ns]'}).dtypes之类的东西将其转换为日期时间类型。
标签: python python-3.x pandas datetime