【问题标题】:convert csv column data type转换 csv 列数据类型
【发布时间】:2018-01-26 14:36:53
【问题描述】:

我有一个包含 2 列的 csv 表:

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

在此示例中,42936 实际上是 7/20/2017。由于 Excel 单元格数据类型是通用的,因此值已更改为 42936

我有一个 python 脚本来读取这个 csv 文件。现在我需要将Exam_date 列类型转换为日期,同时将csv 文件读入DataFrame

【问题讨论】:

    标签: python pandas csv date dataframe


    【解决方案1】:

    您可以使用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
    

    【讨论】:

    • 一个相关问题。如果我想将新值写入同一个 csv 文件。我该怎么做?
    • @hr02 您可以将新行添加到数据框 df 中,然后使用 pandas.DataFrame.to_csv 将新数据框写入 csv 文件,注意在函数中设置 index=False。
    【解决方案2】:

    你可以使用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
    

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2017-10-28
        • 2019-04-13
        • 2021-12-24
        • 1970-01-01
        • 2017-02-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-11-03
        相关资源
        最近更新 更多