2016-06-07 74 views
1

这里我有一个多个对象的例子文件,每个对象在相同的时间点(也是ND.T代表每个唯一的时间点)进行测量。我想将这个文件拆分成单独的文件(使用python脚本),其中包含每个时间点唯一的所有对象,但仍然包含标题。按时间点分割多个对象的csv文件

原始文件:

ID ND.T Time [s] Position X [%s] Position Y [%s] Speed [%s] Area [%s] Width [%s] MeanIntensity 
1 1  3.87   417.57   11.46   0.06  339.48  14.1   245.65 
1 2  8.72   417.37   11.68   0.04  342.61  14.15   239.34 
1 3  13.39  417.57   11.66   0.04  344.17  14.3   239.48 
2 1  3.87   439.01   6.59   0.02  342.61  11.66   204.47 
2 2  8.72   438.97   6.65   0.007  342.61  10.7   197.96 
2 3  13.39  438.94   6.66   0.03  345.74  11.03   214.74 

Time_3.87.csv

ID ND.T Time [s] Position X [%s] Position Y [%s] Speed [%s] Area [%s] Width [%s] MeanIntensity 
1 1  3.87   417.57   11.46   0.06  339.48  14.1   245.65 
2 1  3.87   439.01   6.59   0.02  342.61  11.66   204.47 

Time_8.72.csv

ID ND.T Time [s] Position X [%s] Position Y [%s] Speed [%s] Area [%s] Width [%s] MeanIntensity 
1 2  8.72   417.37   11.68   0.04  342.61  14.15   239.34 
2 2  8.72   438.97   6.65   0.007  342.61  10.7   197.96 

Time_13.39.csv

ID ND.T Time [s] Position X [%s] Position Y [%s] Speed [%s] Area [%s] Width [%s] MeanIntensity 
1 3  13.39  417.57   11.66   0.04  344.17  14.3   239.48 
2 3  13.39  438.94   6.66   0.03  345.74  11.03   214.74 

实施例2:

ID ND.T Time [s] Position X [%s] Position Y [%s] Speed [%s] Area [%s] Width [%s] MeanIntensity 
1 1 3.87 417.57 11.46 0.06 339.48 14.1 245.65 
1 2 8.72 417.37 11.68 0.04 342.61 14.15 239.34 
1 3 13.39 417.57 11.66 0.04 344.17 14.3 239.48 
1 4 18.1 417.73 11.71 0.04 337.92 14.14 225.17 
1 5 22.81 417.83 11.89 0.03 344.17 14.64 233.3 
1 6 27.48 417.69 11.83 0.02 345.74 14.23 238 
1 7 32.16 417.65 11.94 0.03 345.74 14.71 230.75 
2 1 3.87 439.01 6.59 0.02 342.61 11.66 204.47 
2 2 8.72 438.97 6.65 0.007 342.61 10.7 197.96 
2 3 13.39 438.94 6.66 0.03 345.74 11.03 214.74 
2 4 18.1 438.9 6.53 0.04 342.61 10.46 202.9 
2 5 22.81 438.97 6.7 0.02 342.61 10.3 194.32 
2 6 27.48 438.89 6.71 0.006 350.43 11 219.41 
2 7 32.16 438.87 6.74 0.05 348.87 10.36 219.58 
+0

您是否使用'pandas'这个? – EdChum

回答

4

可以使用pandas来实现这一点:

import pandas as pd 
df = pd.read_csv(your_file) 
df.groupby('Time [s]').apply(lambda x: x.to_csv(str(x.name) + '.csv')) 

上面将利用read_csv,然后组上的时间[s]柱加载CSV和使用此名称文件

你可以看到,DF是在时间[s]分组:

In [108]: 
df.groupby('Time [s]').apply(lambda x: print(x)) 
    ID ND.T Time [s] Position X [%s] Position Y [%s] Speed [%s] \ 
0 1  1  3.87   417.57   11.46  0.06 
3 2  1  3.87   439.01    6.59  0.02 

    Area [%s] Width [%s] MeanIntensity 
0  339.48  14.10   245.65 
3  342.61  11.66   204.47 
    ID ND.T Time [s] Position X [%s] Position Y [%s] Speed [%s] \ 
0 1  1  3.87   417.57   11.46  0.06 
3 2  1  3.87   439.01    6.59  0.02 

    Area [%s] Width [%s] MeanIntensity 
0  339.48  14.10   245.65 
3  342.61  11.66   204.47 
    ID ND.T Time [s] Position X [%s] Position Y [%s] Speed [%s] \ 
1 1  2  8.72   417.37   11.68  0.040 
4 2  2  8.72   438.97    6.65  0.007 

    Area [%s] Width [%s] MeanIntensity 
1  342.61  14.15   239.34 
4  342.61  10.70   197.96 
    ID ND.T Time [s] Position X [%s] Position Y [%s] Speed [%s] \ 
2 1  3  13.39   417.57   11.66  0.04 
5 2  3  13.39   438.94    6.66  0.03 

    Area [%s] Width [%s] MeanIntensity 
2  344.17  14.30   239.48 
5  345.74  11.03   214.74 

Out[108]: 
Empty DataFrame 
Columns: [] 
Index: [] 
上10

这里groupby意愿组“时间[s]”列中,我们然后调用apply施加lambda我们调用方法to_csv上的每个分组中,我们可以使用name属性这是dtypeint所以我们访问的组名转换为str和建设我们的CSV名称:

In [109]: 
df.groupby('Time [s]').apply(lambda x: print(str(x.name) + '.csv')) 

3.87.csv 
8.72.csv 
13.39.csv 
Out[109]: 
Empty DataFrame 
Columns: [] 
Index: [] 
+0

这是一个非常好的解决方案。我会在几行中做到这一点,但在调用lambda上做得很好! – tnknepp

+0

谢谢你的优秀回应。我能够安装熊猫并进行测试以确保它可以正常工作。现在,当我尝试运行脚本时,出现以下错误:NameError:name'pd'未定义 – Labrat

+0

对不起,您需要在开始处添加导入:'import pandas as pd'我将更新我的答案 – EdChum