我有这个代码
df['time'] = pd.to_datetime(df['time'], format='%Y-%m-%dT%H:%M:%S.%f000Z')
print (df)
time
0 2018-04-18 19:00:00
1 2018-04-18 19:15:00
2 2018-04-18 19:30:00
问题是,数据未按我将其添加到$ rec的顺序导出
如何按添加顺序将其导出?
答案 0 :(得分:3)
即使不使用函数,简单的
active=False
将产生期望的结果。
您的功能过于复杂:
$mydata = $data | select Name,Grade,Score
在这里返回相同的顺序:
$Data = @"
Name,Grade,Score,Dummy
Anthoni,A,10,v
Brandon,B,20,x
Christian,C,30,y
David,D,40,z
"@ | ConvertFrom-Csv
function get-data() {
ForEach($record in $data) {
[PSCustomObject]@{
Name =$record.name
Grade=$record.grade
Score=$record.score
}
}
}
$mydata=get-data
$mydata # | Export-Csv -Path $outputPath -NoTypeInformation
答案 1 :(得分:2)
LotPings' helpful answer提供了有效的解决方案。
关于您尝试过的事情:
通过仅构造单个 [pscustomobject]
实例循环外的 :
$DLGP = "" | Select "Name","Grade","Score"
,然后在每次循环迭代中仅更新该实例的属性:
$DLGP.Name=$record.name
# ....
您有效地多次将相同的[pscustomobject]
实例添加到结果数组,而不是在每次迭代中创建一个不同的对象。
由于同一对象被重复更新,因此该对象最终具有输入集合$data
中 last 对象的属性。
顺便说一句:
[PSCustomObject] @()
与@()
实际上是相同的:[PSCustomObject]
被忽略,并且您得到一个[object[]]
数组。
要将数组键入为包含[PSCustomObject]
实例的数组,您必须使用 array 类型的强制转换:[PSCustomObject[]] @()
。
但是,鉴于可以将 any 类型的实例强制转换为[PSCustomObject]
-与[psobject]
确实相同-这不会提供类型安全性,也不会提供性能优势。
此外,由于您的$rec
变量不受类型限制(它被定义为$rec = [<type>] ...
而不是[<type>] $rec = ...
),并且您正在使用+=
来“添加” “”数组(总是需要在幕后创建一个新实例),$rec
将在第一个[object[]]
操作之后恢复为+=
数组。