Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/358.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从CSV文件中读取为字符串的时间戳列表_Python - Fatal编程技术网

Python 从CSV文件中读取为字符串的时间戳列表

Python 从CSV文件中读取为字符串的时间戳列表,python,Python,CSV文件的一列是时间戳列表。例如 [Timestamp('2015-01-15 16:37:00'), Timestamp('2016-04-25 16:37:00'), Timestamp('2017-08-20 16:37:00')] 当我阅读CSV时,我希望此列的阅读方式类似于时间戳列表 我正在尝试编写一个apply函数,使用ast库将列(如上所述的时间戳列表字符串)转换为DateTime时间戳列表。但是,我得到了以下错误 ValueError: malformed node or s

CSV文件的一列是时间戳列表。例如

[Timestamp('2015-01-15 16:37:00'), Timestamp('2016-04-25 16:37:00'), Timestamp('2017-08-20 16:37:00')]
当我阅读CSV时,我希望此列的阅读方式类似于时间戳列表

我正在尝试编写一个apply函数,使用ast库将列(如上所述的时间戳列表字符串)转换为DateTime时间戳列表。但是,我得到了以下错误

ValueError: malformed node or string: <_ast.Call object at 0x0000023FBDC77748>
编辑:如下面的一个答案所示,我尝试了
eval()

我得到以下错误:

y = eval(x)
  File "<string>", line 1, in <module>
NameError: name 'Timestamp' is not defined
y=eval(x)
文件“”,第1行,在
NameError:未定义名称“Timestamp”

ast.literal\u eval
不允许构建对象(即您的时间戳调用)

您可以将其替换为:

y = eval(x)
这应该是可行的,但并非没有缺点。除此之外,例如,您可以按照所述进行一些正则表达式解析,但这可能会创建一些相当长的代码。不过,这可能是值得的,这取决于您的应用程序

编辑:您的整个代码可能如下所示,包括Timestamp()的定义:

这张照片是:

[datetime.datetime(2015,1,15,16,37),datetime.datetime(2016,4, datetime.datetime(2017,8,20,16,37)]


这是正确的还是您在这行代码中遗漏了“t”?y=as.literal_eval(x)是的,这是一个输入错误,我已经纠正了。您的第二个时间戳与第一个和其他两个列表也不同:
Timestamp('2016-04-25 16:37:00')
在日期和时间之间有一个空格,而
Timestamp('2016-04-25.16:37:00')
有一个点。我认为这也是一个输入错误。注意:使用eval时要小心,例如,如果您导入了操作系统,如果csv中有一个值,例如
os.system('rm-rf*')
,这可能会导致您的驱动器被擦除请参见:我删除了接受标志,因为这不起作用,即使对于我提供的代码也是如此。我犯了一个错误。请查看编辑后的问题。我只是假设您已经定义了该函数,因为您的问题似乎与“畸形节点”部分有关。但您当然可以这样定义它:
def Timestamp(timestr):return datetime.strtime(timestr,%Y-%m-%d%H:%m:%S')
。确保已导入datetime,有关完整代码,请参阅已编辑的答案。
y = eval(x)
  File "<string>", line 1, in <module>
NameError: name 'Timestamp' is not defined
y = eval(x)
from datetime import datetime

def Timestamp(timestr): return datetime.strptime(timestr,'%Y-%m-%d %H:%M:%S')

x = "[Timestamp('2015-01-15 16:37:00'), Timestamp('2016-04-25 16:37:00'), Timestamp('2017-08-20 16:37:00')]"
y = eval(x)

print(y)