使用python转换csv列数据类型

时间:2017-08-18 02:35:06

标签: python pandas csv date

我有一张包含2列的csv表

   Subject,Exam_Date
   Maths,4/13/2017
   Physics,4/15/2016
   English,42936

在这个例子中 - 42936实际上是2017年7月20日。由于excel单元格数据类型是通用的 - 值已更改为42936。 我有一个python脚本来读取此csv文件。现在,我需要在将csv文件读取到dataframe时将Exam_date列类型转换为日期。 请帮助。

提前致谢。

3 个答案:

答案 0 :(得分:2)

您可以使用xlrd.xldate_as_tuple将数字转换为日期元组,然后转到datetime模块:

import datetime
import xlrd
df=pd.read_csv('test.csv')
converted_date = [ e if '/' in e else datetime.datetime(*xlrd.xldate_as_tuple(int(e),0)) for e in df["Exam_Date"] ]
df["Exam_Date"] = converted_date
df

df将是:

    Subject Exam_Date
0   Maths   2017-04-13
1   Physics 2016-04-15
2   English 2017-07-20

答案 1 :(得分:1)

您可以使用converters

import xlrd
In [44]: def converter(x):
    ...:     try:
    ...:         return xlrd.xldate.xldate_as_datetime(int(x), 0)
    ...:     except (ValueError, TypeError):
    ...:         return x
    ...:     

In [45]: pd.read_csv('test.csv', converters={'Exam_Date': converter})
Out[45]: 
   Subject  Exam_Date
0    Maths 2017-04-13
1  Physics 2016-04-15
2  English 2017-07-20

答案 2 :(得分:0)

只需将带有分隔符的read_table用作“,”,然后将literal_eval用作在相关列中转换值的函数。

recipes = pd.read_table("\souravD\PP_recipes.csv", sep=r',', names=["id", "i", "name_tokens", "ingredient_tokens", "steps_tokens", "techniques","calorie_level","ingredient_ids"], converters = {'name_tokens' : literal_eval, 'ingredient_tokens' : literal_eval, 'steps_tokens' : literal_eval, 'techniques' : literal_eval, 'ingredient_ids' : literal_eval},header=0)

Recipes dataframe after changing datatype