【问题标题】:Converting date and time format when importing csv file in Python在 Python 中导入 csv 文件时转换日期和时间格式
【发布时间】:2020-12-21 09:10:03
【问题描述】:

我还没有找到类似问题的解决方案,所以我必须在这里试一试。 我在记事本中导入一个如下所示的 csv 文件:

",""ItemName"""
"Time,""Raw Values"""
"7/19/2019  10:31:29 PM,"" 0"","
"7/19/2019  10:32:01 PM,"" 1"","

当我将它保存为新的 csv 时,我想要的是重新格式化日期/时间和相应的值(分析软件需要):分号作为分隔符,最后很重要,我不'真的需要一个标题。

2019-07-19 22:31:29;0;
2019-07-19 22:32:01;1;

这就是它在 Python 中的样子:

Item1 = pd.read_csv(r'.\Datafiles\ItemName.csv')
Item1

#Output:
# ,"ItemName"
# 0 Time,"Raw Values"
# 1 7/19/2019 10:31:29 AM," 0",
# 2 7/19/2019 10:32:01 AM," 1",

valve_G1.dtypes
# ,"ItemName"    object
# dtype: object

我尝试过使用 datetime 没有任何运气,但我不知道的数据类型可能有些可疑。

【问题讨论】:

    标签: python dataframe csv date datetime


    【解决方案1】:

    您需要的原则上是读取到 DataFrame,转换 datetime 列并将 df 再次导出为 csv。我认为您需要摆脱引号字符才能正确导入。您可以通过将文件内容读取为字符串、替换 '"' 并将该字符串提供给 pandas.read_csv 来实现。EX:

    import os
    from io import StringIO
    import pandas as pd
    
    # this is just to give an example:
    s='''",""ItemName"""
    "Time,""Raw Values"""
    "7/19/2019 10:31:29 PM,"" 0"","
    "7/19/2019 10:32:01 PM,"" 1"","'''
    f = StringIO(s)
    # in your script, make f a file pointer instead, e.g.
    # with open('path_to_input.csv', 'r') as f:
    
    # now get rid of the "
    csvcontent = ''
    for row in f:
        csvcontent += row.replace('"', '')
            
    # read to DataFrame
    df = pd.read_csv(StringIO(csvcontent), sep=',', skiprows=1, index_col=False)
    df['Time'] = pd.to_datetime(df['Time'])
    
    # save cleaned output as ;-separated csv
    dst = 'path_where_to_save.csv'
    df.to_csv(dst, index=False, sep=';', line_terminator=';'+os.linesep)
    

    【讨论】:

    • 这很完美!是否可以在末尾添加分号?现在它返回 2019-07-19 10:31:29;0 但我真的很想要 2019-07-19 10:31:29;0;
    • @Henning:当然,您可以通过将行终止符指定为分号 + 您的操作系统默认行分隔符来添加它。
    猜你喜欢
    • 2019-10-09
    • 1970-01-01
    • 1970-01-01
    • 2012-03-27
    • 1970-01-01
    • 1970-01-01
    • 2022-01-09
    • 2012-12-31
    • 1970-01-01
    相关资源
    最近更新 更多