Python 转换csv列数据类型

Python 转换csv列数据类型,python,pandas,csv,date,dataframe,Python,Pandas,Csv,Date,Dataframe,我有一个csv表,有两列: 科目、考试日期 数学,4/13/2017 物理学,4/15/2016 英语,42936 在本例中,42936实际上是7/20/2017。由于Excel单元格数据类型为常规,因此该值更改为42936 我有一个python脚本来读取这个csv文件。现在,在将csv文件读入数据帧时,我需要将Exam\u date列类型转换为日期。您可以使用xlrd.xldate\u as\u tuple将数字转换为日期tuple,然后馈送到datetime模块: import datet

我有一个csv表,有两列:

科目、考试日期
数学,4/13/2017
物理学,4/15/2016
英语,42936
在本例中,
42936
实际上是
7/20/2017
。由于Excel单元格数据类型为常规,因此该值更改为
42936


我有一个python脚本来读取这个csv文件。现在,在将csv文件读入数据帧时,我需要将
Exam\u date
列类型转换为日期。您可以使用
xlrd.xldate\u as\u tuple
将数字转换为日期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

您可以使用
xlrd.xldate\u as\u tuple
将数字转换为日期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

您可以使用
转换器

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

您可以使用
转换器

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

只需使用带分隔符的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)

只需使用带分隔符的read\u table和literal\u 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)

一个相关问题。如果我想将新值写入同一个csv文件。我该怎么做?@hr02您可以在数据框df中添加新行,然后使用函数中的“注意:set index=False”将新数据框写入csv文件。一个相关问题。如果我想将新值写入同一个csv文件。我该怎么做?@hr02您可以在数据帧df中添加新行,然后使用函数中的注释set index=False将新数据帧写入csv文件。