需要将CSV分解成更小的表,这取决于我的一列(时间)的值



我有带时间戳的空间跟踪数据(lat,long)。如果任何两个连续点之间的时间超过2小时,我就无法很好地分析数据,所以我想根据用户指定的时间阈值来分割数据集。最终目标是将它们作为形状文件(点)上传到ArcGIS中。很多拆分都是为了拆分成相等的行数或一些公共属性,但这将由用户指定,并因数据集而异。我对此非常陌生,所以没有一个不可笑的脚本,但我正在考虑读取新数据,然后创建空列表,只要时间(deltaseconds)小于一定量(比如30分钟或1800秒),就添加到这些列表中。一旦达到这个数量,将其保存为列表并创建一个输出文件,然后从下一点开始进入一个新列表。。。但在CSV中可能有办法做到这一点?这是csv:中的数据示例

Time                   Lat      Lng        Time     deltaseconds
9/12/2015   21:52   16.5033   -85.87527   0:00:00    0
9/12/2015   21:52   16.5033   -85.87524   0:00:01    1
9/12/2015   21:53   16.5033   -85.8752    0:00:55    55

感谢您的帮助!!非常感谢。

我知道您希望根据"deltaseconds"字段中给定的时间段范围来拆分多个形状文件中的现有csv。首先手动将字段名称"deltaseconds"更改为"deltasec",因为shapefile的字段长度最多只能为10个字符。下面是您可以在arcpy中运行的脚本:

import arcpy
from arcpy import env
def export_multiple_shps(workspace,file,t):
# Define workspace
    env.workspace=workspace
# Convert CSV to Shapefile, assuming that x-field is 'Lng' & y-field is 'Lat'
    MakeXYEventLayer_management(file, "Lng", "Lat", "tracking.shp")
# Count no. of rows in tracking shapefile
    arcpy.MakeTableView_management("tracking.shp","tableView")
    row_count=int(arcpy.GetCount_management("tableView").getOutput(0))
    k=1
    j=0
# Loop to export shapefiles after every t sec increment in 'deltasec' 
    for i in range(t,row_count,t):
        query1='"deltasec"<={}'.format(i)
        query2='"deltasec"<={}'.format(j)
        arcpy.SelectLayerByAttribute_management("tracking.shp","NEW_SELECTION",query1)
        arcpy.SelectLayerByAttribute_management("tracking.shp","REMOVE_FROM_SELECTION",query2)
        arcpy.CopyFeatures_management("tracking.shp","tracking"+str(k)+".shp")
        j=i
        k+=1
# Executing function, by assuming csv is placed in "D:/data" with name "tracking.csv", & we want to export shapefile after every "1800 sec". You can change the inputs as per requirement
export_multiple_shps(workspace="D:/data",file="tracking.csv",t=1800)

如果你的要求是别的,请告诉我。

相关内容

最新更新