【问题标题】:AttributeError: 'set' object has no attribute 'keys'AttributeError:“set”对象没有属性“keys”
【发布时间】:2021-08-09 21:06:47
【问题描述】:

我正在尝试将 Unix 秒数从 csv 文件转换为日期和时间,并尝试将输出作为新列写入 csv 文件。我可以转换和打印日期和时间,但我不能将其写入与新列相同的 csv。

AttributeError: 'set' 对象没有属性 'keys'

我尝试用不同的方式写作,但卡住了。我做错了什么?

import pandas as pd

df = pd.read_csv ('C:/New.csv',sep=';')
print (df)

import datetime
import csv


for i in range(0,len(df)):
    row= df.iloc[i]['arrival_unix_seconds']
    a = int(row)
    date = datetime.datetime.utcfromtimestamp(a)
    targetDate = date.strftime("%Y-%m-%d %H:%M:%S")
    #print(targetDate)
    #targetDate.to_csv("b.csv", sep=';', index=False)

with open("New.csv", "a") as inputfile:

title = ["id", "space_id", "arrival_unix_seconds", "departure_unix_seconds", "xml_id", "Arrival_time"]
writer = csv.DictWriter(inputfile, delimiter=';', fieldnames = title)
writer.writerow({"Arrival_time: targetDate"})

样本数据

id;space_id;arrival_unix_seconds;departure_unix_seconds;xml_id;Arrival_time 2950;72729;1619808731;1619809039;22
320;16639;1612627087;1612628433;76
82;3408;1609751088;1609751723;7

【问题讨论】:

  • 顾名思义,DcitReder 用于阅读。您需要csv.DictWriter 进行写作。另外,如果使用 pandas,请查看 pandas.to_csv
  • 谢谢 Buran,我已经尝试过了,但我得到一个新错误 AttributeError: 'set' object has no attribute 'keys'
  • {"Arrival_time: targetdata"}set,而不是 dict
  • 请建议可以做些什么来使它成为一个字典。 @buran
  • 你的意思可能是{"Arrival_time": target_data};你所拥有的是一个集合,其中包含一个 看起来 像键值对的单个字符串。

标签: python pandas csv datetime unix-timestamp


【解决方案1】:

试试apply,它比逐行迭代快得多

df['arrival_unix_seconds'] = df.arrival_unix_seconds.apply(lambda x: \
    (datetime.datetime.utcfromtimestamp(int(x))).strftime("%Y-%m-%d %H:%M:%S"))

# Save it like this
pd.to_csv('NEW.csv', index=False)

不是这个

for i in range(0,len(df)):
    row= df.iloc[i]['arrival_unix_seconds']
    a = int(row)
    date = datetime.datetime.utcfromtimestamp(a)
    targetDate = date.strftime("%Y-%m-%d %H:%M:%S")
    #print(targetDate)
    #targetDate.to_csv("b.csv", sep=';', index=False)

with open("New.csv", "a") as inputfile:

title = ["id", "space_id", "arrival_unix_seconds", "departure_unix_seconds", "xml_id", "Arrival_time"]
writer = csv.DictWriter(inputfile, delimiter=';', fieldnames = title)
writer.writerow({"Arrival_time: targetdata"})

【讨论】:

  • 感谢 Pawan Jain,但它显示错误 KeyError Traceback (最近一次调用最后一次),
  • 您能否在有问题的 2-3 行中添加一些示例数据
  • ID; space_id; arrival_unix_seconds; departure_unix_seconds; xml_id; ARRIVAL_TIME 2950; 72729; 1619808731; 1619809039; 22 320; 16639; 1612627087; 1612628433; 76 82; 3408; 1609751088; 1609751723; 7 跨度>
  • 50M 行的数据如下所示
  • 现在已更改,如果可行,请接受答案:)
猜你喜欢
  • 2018-03-11
  • 2015-11-14
  • 1970-01-01
  • 1970-01-01
  • 2012-05-11
  • 1970-01-01
  • 2023-03-09
  • 1970-01-01
  • 2018-01-25
相关资源
最近更新 更多