开发者社区 问答 正文

在创建CSV之前,panda会转换Epoch时间

我这里有一个简单的脚本,它获取一个响应(原始JSON),然后用panda组织它,并从中创建一个CSV。然而,我注意到其中一列是大纪元时间出于某种原因。在转换到CSV之前,将NPSDate列转换为整个dataframe的正常datetime的正确方法是什么?如果我这样尝试,它会返回这些错误:

 File "NPStoGainsight.py", line 42, in <module>
    NPS['NPSDate'] = pandas.to_datetime(['NPSDate'], unit='ms', utc=True)
  File "/home/ec2-user/.local/lib/python2.7/site-packages/pandas/core/tools/datetimes.py", line 609, in to_datetime
    result = convert_listlike(arg, box, format)
  File "/home/ec2-user/.local/lib/python2.7/site-packages/pandas/core/tools/datetimes.py", line 203, in _convert_listlike_datetimes
    errors=errors)
  File "pandas/_libs/tslib.pyx", line 398, in pandas._libs.tslib.array_with_unit_to_datetime
NPS = pandas.DataFrame(reportData)

renamedColumns = {
        'account_salesforce_total_arr__c' : 'totalARR',
        'account_salesforce_pricing_package__c' : 'pricingPackage',
        'account_salesforce_customer_classification__c' : 'customerClassification',
        'account_salesforce_account_manager_full_name__c' : 'CSM',
        'account_agent_plancommit' : 'planCommit',
        'poll_543uce0tt59_eqOSduL4o25wbYsmfGbmj_pgBXY_pollResponse' : 'NPSComment',
        'account_auto_id' : 'accountId',
        'visitor_agent_email' : 'email',
        'poll_tudk5p2oot9_eqOSduL4o25wbYsmfGbmj_pgBXY_pollResponse' : 'NPSResponse',
        'poll_tudk5p2oot9_eqOSduL4o25wbYsmfGbmj_pgBXY_pollTime' : 'NPSDate'
}

NPS = NPS.rename(columns = renamedColumns)

NPS = pandas.to_datetime(NPS['NPSDate'], unit='ms')

NPS.to_csv("NPStoGainsight.csv", encoding='utf-8', index=False)

使用大纪元时间的MS日期格式(例如:1.5667E+12) 问题来源StackOverflow 地址:/questions/59381038/pandas-convert-epoch-time-before-creating-csv

展开
收起
kun坤 2019-12-30 09:59:23 525 分享 版权
阿里云 AI 助理回答

在你的脚本中,你尝试将某一列转换为datetime类型时直接使用了pandas.to_datetime()函数,并且错误地将列名放在了一个列表里。正确的做法是直接应用该函数到DataFrame的特定列上,而不需要额外的列表包装。另外,确保你在调用to_datetime()时正确地引用了已经重命名后的列名。以下是修改后的代码段:

import pandas as pd

# 假设 reportData 是你获取的原始JSON数据并已转换为Python字典或DataFrame
NPS = pd.DataFrame(reportData)

renamedColumns = {
    'account_salesforce_total_arr__c': 'totalARR',
    'account_salesforce_pricing_package__c': 'pricingPackage',
    'account_salesforce_customer_classification__c': 'customerClassification',
    'account_salesforce_account_manager_full_name__c': 'CSM',
    'account_agent_plancommit': 'planCommit',
    'poll_543uce0tt59_eqOSduL4o25wbYsmfGbmj_pgBXY_pollResponse': 'NPSComment',
    'account_auto_id': 'accountId',
    'visitor_agent_email': 'email',
    'poll_tudk5p2oot9_eqOSduL4o25wbYsmfGbmj_pgBXY_pollResponse': 'NPSResponse',
    'poll_tudk5p2oot9_eqOSduL4o25wbYsmfGbmj_pgBXY_pollTime': 'NPSDate'
}

NPS = NPS.rename(columns=renamedColumns)

# 直接对'NPSDate'列应用to_datetime,注意这里不加列表包装
NPS['NPSDate'] = pd.to_datetime(NPS['NPSDate'], unit='ms', utc=True)

NPS.to_csv("NPStoGainsight.csv", encoding='utf-8', index=False)

这段代码首先定义了你的DataFrame NPS 并进行了列名的重命名。然后,它直接在NPSDate列上应用了pd.to_datetime()函数,指定了时间单位为毫秒(unit='ms')并设置了UTC时区(utc=True),以正确地将大纪元时间戳转换为标准的datetime格式。最后,将转换后的DataFrame保存为CSV文件。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答
问答地址: