如何使用"引号"来调用需要字符串的函数?

时间:2014-03-29 16:56:28

标签: python string wolfram-mathematica raspberry-pi

我正在尝试在Mathematica上编写一个小脚本,用于绘制我使用Python获取的特定数据集。 数据输出如下: 它是一个标准的日期时间对象,它被回显到tsv文件中。

2014-03-29 08:39:37.080834  04  0.403980970383  0.2
2014-03-29 08:39:39.449200  04  0.383723974228  0.2
2014-03-29 08:39:42.603058  04  0.475341081619  0.2
2014-03-29 08:39:44.882941  04  0.303984165192  0.2
2014-03-29 08:39:47.021998  04  0.312470912933  0.2
2014-03-29 08:39:48.951891  04  0.312346935272  0.2

第一列是日期时间对象,时间和日期之间用空格分隔,而不是\ t。接下来的3列是以\ t分隔的列,但与手头的问题无关(尽管如果有人有兴趣,我很乐意告诉他们的意思)。

所以我要做的是将第一列导入Mathematica,以便我可以绘制第一列和第二列(即日期和时间(x轴)与04s(y轴,表示事件))。 为此我做了这个:

data = Import["/home/pi/Desktop/data.tsv"]
dates = data[[;;,1]]
DateList[dates]

但最后一行是我收到错误的地方。我知道如果我调用DateList函数并且在“引号”中给它一个日期对象它可以工作,但由于某些原因这些字符串不在引号中它返回错误。该错误表示输入不能解释为日期或时间输入。

我尝试使用类似DateList [dates // InputForm [%]]之类的东西,但它仍然不起作用。

请帮助我理解Mathematica中的字符串是如何工作的! :)

美联储

2 个答案:

答案 0 :(得分:1)

我对mathematica没有任何经验,但它应该很容易确保每个日期都有引号:

data = Import["/home/pi/Desktop/data.tsv"]
dates = data[[;;,1]]
dates = ['"' + date + '"' for date in dates]
DateList[dates]

仅供参考我假设dates中的每个日期都是一个字符串。

答案 1 :(得分:1)

日期的字符串格式包括“ - ”,“”和“:”。 Datelist的文档声称你应该能够为它提供一个格式字符串并让它从字符串中提取日期,但重复尝试使其工作失败。仔细研究文档的详细信息,看看是否可以给它一个有效的字符串格式。或者只是进行一些字符串黑客攻击并提取自己的字段并完成它。

In[1]:= data = Import["data.tsv"];
dates = data[[;; , 1]];
fixeddates = Map[ToExpression["{" <> StringReplace[#,
   {"-" -> ",", " " -> ",", ":" -> ","}] <> "}"] &, dates]

Out[3]= {{2014, 3, 29, 8, 39, 37.0808}, {2014, 3, 29, 8, 39, 39.4492},
   {2014, 3, 29, 8, 39, 42.6031}, {2014, 3, 29, 8, 39, 44.8829},
   {2014, 3, 29, 8, 39, 47.022}, {2014, 3, 29, 8, 39, 48.9519}}

其中每个日期现在都是数字列表。

啊,在使格式化字符串工作方面取得了一些进展。这工作

In[18]:= DateList[{"2014-03-29 08:39:48", {"Year", "-", "Month",
  "-", "Day", " ", "Hour", ":", "Minute", ":", "Second"}}]

Out[18]= {2014, 3, 29, 8, 39, 48.}

但这不是

In[19]:= DateList[{"2014-03-29 08:39:48.951891", {"Year", "-", "Month",
   "-", "Day", " ", "Hour", ":", "Minute", ":", "Second"}}]

During evaluation of In[19]:= DateString::str: String 2014-03-29 08:39:48.951891 cannot be interpreted as a date in format {Year,-,Month,-,Day, ,Hour,:,Minute,:,Second}. >>

Out[19]= DateList[{"2014-03-29 08:39:48.951891", {"Year", "-", 
 "Month", "-", "Day", " ", "Hour", ":", "Minute", ":", "Second"}}]

因此,即使文档说“日,小时,分钟和第二个值可以是非整数:”,日期列表将提取整数秒但不提取实际秒数。

除非其他人能够提出一个看起来像个错误的好解释。

编辑显示如何绘制数据

data = Import["data.tsv"];
points = data[[All, {1, 3}]]; (*extract date and 3rd column*)
fixedpoints = Map[{ToExpression["{" <> StringReplace[First[#],
   {"-" -> ",", " " -> ",", ":" -> ","}] <> "}"], Last[#]} &, points];
DateListPlot[fixedpoints, PlotStyle -> PointSize[0.02]]

...PlotSnipped...