【问题标题】:How do I plot csv data imported using Excel's default import wizard?如何绘制使用 Excel 的默认导入向导导入的 csv 数据?
【发布时间】:2021-06-26 20:03:06
【问题描述】:

我在尝试绘制从 csv 文件导入 Excel 的数据时遇到了问题。我过去使用旧版本的 Microsoft Excel 绘制过类似的 csv 文件,但最新版本的 Excel 给我带来了问题。

首先,我通过导航到 Data>From Text/CSV> 从我的 csv 文件导入数据,然后选择 csv 文件,>Import>Load。数据似乎已正确导入。但是当我选择我的数据并点击 Insert>Scatter with Smooth Lines 时,它的图形不正确: Default Wizard's Resulting Graph (Actual Result).

File>Options>Data 启用 Legacy 向导,并从 Data>Get Data>Legacy Wizards>From Text (Legacy) 导入 csv 文件后,可以像在旧版本的 Excel 中一样绘制数据:Legacy Wizard's Resulting Graph (Desired Result)

请注意,对于这两种情况,我选择了相同的单元格,然后绘制了数据。但在默认向导中,它不起作用。当我尝试单独选择列时,y 值全部变为 0;类似于this unanswered query。我尝试将格式转换为“数字”而不是“常规”,但没有帮助。

如何绘制使用最新版本 Excel 导入的 csv 数据?提前致谢!

编辑:这是供参考的原始 CSV 文件

Time of Export: 2021-03-30 1:10:00,,,,
Start Date / Time: 2021-03-30 12:00:00,,,,
End Date / Time: 2021-03-30 12:30:00,,,,
Sample Rate: 1 minute(s),,,,
,Temperature Probe 1,Temperature Probe 2,Temperature Probe 3,Temperature Probe 4
TimeStamp,TP 1001 temperature (ーC),TP 1002 temperature (ーC),TP 1003 temperature (ーC),TP 1004 temperature (ーC)
2/2/2021 12:00,23.23676,0,20.62355,21.99797
2/2/2021 12:01,22.48625,0,20.65972,21.84425
2/2/2021 12:02,21.63628,0,20.53313,21.84425
2/2/2021 12:03,20.52409,0,20.3975,21.70863
2/2/2021 12:04,19.23105,0,20.44271,21.6815
2/2/2021 12:05,17.82046,0,20.30708,21.49161
2/2/2021 12:06,16.2019,0,20.23473,21.18417
2/2/2021 12:07,14.29398,0,19.76454,20.99429
2/2/2021 12:08,12.23235,0,19.49327,20.55122
2/2/2021 12:09,9.998917,0,18.95074,19.89113
2/2/2021 12:10,7.964409,0,18.30874,19.42094
2/2/2021 12:11,5.749062,0,17.60344,18.68851
2/2/2021 12:12,3.316696,0,17.27792,18.12789
2/2/2021 12:13,1.11039,0,16.52741,17.63961
2/2/2021 12:14,-1.493782,0,15.50564,16.91623
2/2/2021 12:15,-3.645836,0,14.65567,16.22902
2/2/2021 12:16,-5.598961,0,13.49826,15.11683
2/2/2021 12:17,-7.714844,0,12.57595,14.48387
2/2/2021 12:18,-9.866898,0,11.40046,13.3988
2/2/2021 12:19,-11.69344,0,11.21058,12.9919
2/2/2021 12:20,-14.09867,0,10.22497,12.12384
2/2/2021 12:21,-16.55816,0,9.519676,11.59035
2/2/2021 12:22,-18.64692,0,8.588326,10.8308
2/2/2021 12:23,-20.63622,0,7.693146,10.17072
2/2/2021 12:24,-22.58029,0,7.204865,9.809029
2/2/2021 12:25,-25.03979,0,6.192131,8.515984
2/2/2021 12:26,-27.01099,0,4.817711,7.575592
2/2/2021 12:27,-29.67846,0,4.085289,6.445313
2/2/2021 12:28,-31.88477,0,3.072556,5.712891
2/2/2021 12:29,-33.65704,0,2.765121,5.387367
2/2/2021 12:30,-35.41124,0,2.48481,4.636864
---------------------------------------------,,,,

【问题讨论】:

  • 您的数据很可能被解释为 TEXT,可能是由于列顶部的空白行。 (更改单元格格式不会更改数据类型)。在加载到工作表之前,使用 Import>Transform 并正确键入 Power Query 中的列。如果这不起作用,请创建一个重现问题的示例,并将其作为文本粘贴到您的问题中。
  • 哦,我没有意识到使用 Windows 功能区更改格式不会改变数据类型。我现在尝试点击 Transform 并将数据类型更改为“十进制数”,但之前存在的信息和标题消失了。我想快速解决办法是删除所有前面的数据,但我认为也许还有另一种方法可以做到这一点。感谢您的反馈!与此同时,我会继续摆弄。
  • 如果你能接受结果,一个简单的方法是删除前五行;然后将第六行(现在是第一行)提升为 Header。然后可以进行正确的数据输入。
  • 第五行和第六行可以组合成两行表头;并且可能结合前六行以保留标识数据。然后你会结束,在 Excel 中使用多行标题
  • 我认为您删除前五行(然后重新插入)的快速修复方法似乎是迄今为止最好的方法。我不确定如何组合行。那是 Transform 函数的一部分吗?

标签: excel csv graph import legacy


【解决方案1】:

虽然删除前五行并将第六行提升为标题,但这是一个快速修复;如果要保留最顶层的信息,则需要将这六行组合起来,然后进行提升。

  • 转置表格
  • 合并前六列,使用<linefeed>作为分隔符
  • 转置表格
  • 将第一行提升为标题
  • 输入它(可以由 UI 自动完成)
  • 确保(在 Excel 中)启用自动换行并正确调整行/列的大小。

这种方法的缺点是第一行会有很多信息,而不是被分割成单独的行

M 码

let
    Source = Csv.Document(File.Contents("C:\Users\ron\Desktop\sampledata.csv"),[Delimiter=",", Columns=5, Encoding=1252, QuoteStyle=QuoteStyle.None]),
    #"Transposed Table" = Table.Transpose(Source),
    #"Merged Columns" = Table.CombineColumns(#"Transposed Table",
        {"Column1", "Column2", "Column3", "Column4", "Column5", "Column6"},
        Combiner.CombineTextByDelimiter("#(lf)", QuoteStyle.None),"Merged"),
    #"Transposed Table1" = Table.Transpose(#"Merged Columns"),

    #"Promoted Headers" = Table.PromoteHeaders(#"Transposed Table1", [PromoteAllScalars=true]),
    
    #"Changed Type" = Table.TransformColumnTypes(#"Promoted Headers",{
        {"Time of Export: 2021-03-30 1:10:00#(lf)Start Date / Time: 2021-03-30 12:00:00#(lf)End Date / Time: 2021-03-30 12:30:00#(lf)Sample Rate: 1 minute(s)#(lf)#(lf)TimeStamp", type datetime}, 
        {"#(lf)#(lf)#(lf)#(lf)Temperature Probe 1#(lf)TP 1001 temperature (ï½°C)", type number}, 
        {"#(lf)#(lf)#(lf)#(lf)Temperature Probe 2#(lf)TP 1002 temperature (ï½°C)", Int64.Type},
         {"#(lf)#(lf)#(lf)#(lf)Temperature Probe 3#(lf)TP 1003 temperature (ï½°C)", type number}, 
         {"#(lf)#(lf)#(lf)#(lf)Temperature Probe 4#(lf)TP 1004 temperature (ï½°C)", type number}})
in
    #"Changed Type"

数据结果

现在要绘制的值是数字

【讨论】:

  • 我对 Power Query 编辑器不太熟悉,但它确实通过 View>Advance Editor 提供了一个选项来粘贴您提供的代码,它确实有效!我试图复制您的步骤,但被困在“合并前六列,使用 作为分隔符”和“键入它(可以由 UI 自动完成)”的意思上。我在 Transform 和“将第一行提升为标题”步骤下找到了 Transpose 命令,但无法执行其他步骤。
  • @MezJ 转置后,前六行将是前六列。然后您可以选择这些列; Merge 列有一个分隔符选项,即换行符。然后你转置回来,合并的列将成为第一行。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-10-14
  • 2019-05-09
  • 2021-02-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-05-16
相关资源
最近更新 更多