使用 numpy 迭代 csv 文件

问题描述 投票:0回答:1

我有一个 CSV 文件,有 4 列,其中包含轨道的 x、y 位置。 第一列是轨道的 ID。第二列是时间。第 3 个和第 4 个是 X 和 Y 坐标。

现在 X 和 Y 位置随着时间(第 2 列)从 1 变化到 39。我编写了函数(带有 for 循环)来计算 X 和 Y 的均方位移 (MSD),作为时间的函数(第 2 列) ).

但是,我想创建一个“for”循环,其中代码可以识别 ID#(来自第 1 列),计算上述第一条轨道的 X 和 Y 的 MSD 作为时间范围的函数。然后对第 1 列中的第 2 轨重复此任务,依此类推。最终,将所有这些数据写入 csv。

这将是一个嵌套的 for 循环,其中对于 col#1 中的每个 track#,它将计算 MSD 值。

希望问题陈述清楚。

为了简化,我提供 ID#1 和 ID#2 的数据。

[ID Time    X   Y
1   0   1601.335544 496.4608855
1   1   1581.838184 497.3440951
1   2   1574.051153 493.2139985
1   3   1559.965258 504.9056873
1   4   1559.163646 493.4245832
1   5   1552.987661 494.2848072
1   6   1548.432535 497.3584389
1   7   1538.938784 495.0417267
1   8   1531.85109  489.0665788
1   9   1513.806745 504.7704007
1   10  1510.326674 497.5994863
1   11  1504.674908 506.2031946
1   12  1501.314024 509.9807796
1   13  1486.108431 530.8405735
1   14  1478.028873 528.9872163
1   15  1461.280431 555.1810352
1   16  1457.827357 544.1238295
1   17  1438.153357 546.1896118
1   18  1432.669134 536.079993
1   19  1421.693967 539.1976368
1   20  1420.047558 531.8360775
1   21  1407.484016 552.6212932
1   22  1401.323039 542.387526
1   23  1392.214888 550.167287
1   24  1383.369105 538.1534221
1   25  1376.908441 563.2408666
1   26  1375.965296 552.1877753
1   27  1356.164381 565.6603602
1   28  1350.494881 554.3032903
1   29  1343.425562 554.2145022
1   30  1338.147555 543.5654733
1   31  1319.226209 549.3667058
1   32  1315.186512 544.1423621
1   33  1304.524207 559.4354187
1   34  1307.192095 545.9207145
1   35  1297.79372  555.0278485
1   36  1293.623393 548.495482
1   37  1272.472404 556.9643619
1   38  1267.257919 553.4317279
1   39  1256.48484  564.7547876
2   0   1938.04852  502.2096272
2   1   1910.274979 499.4121209
2   2   1905.602566 494.564121
2   3   1892.023117 500.8674278
2   4   1890.41268  497.2568435
2   5   1889.370728 497.1678774
2   6   1879.222251 493.4259324
2   7   1854.213543 505.9090132
2   8   1849.009713 506.4718795
2   9   1827.907196 521.1249766
2   10  1825.557874 513.5055768
2   11  1811.655479 514.9185746
2   12  1804.375201 506.0495205
2   13  1790.033474 520.9751489
2   14  1782.406459 512.8187715
2   15  1768.6465   528.522878
2   16  1767.990804 526.0058206
2   17  1761.603106 535.8145984
2   18  1753.677501 517.6532347
2   19  1747.538543 539.0509296
2   20  1746.84304  531.1623969
2   21  1742.643159 543.8348459
2   22  1736.949154 534.7801535
2   23  1729.319064 542.8045771
2   24  1724.696825 533.3967561
2   25  1704.024318 549.7868714
2   26  1692.312454 544.4582317
2   27  1686.267143 547.7829218
2   28  1673.865039 545.091512
2   29  1662.986818 562.5577513
2   30  1656.270704 562.4002987
2   31  1642.961381 568.3286907
2   32  1643.388565 563.512262
2   33  1631.965059 570.7782627
2   34  1634.874901 563.7563826
2   35  1622.105795 574.0527937
2   36  1616.78351  569.5772635
2   37  1611.596229 576.4976228
2   38  1608.866078 567.6358896
2   39  1591.533636 576.2326799]

这是我用于从 X 和 Y 计算 MSD 的 for 循环。

def calc_msd_np(x):
    msd = []
    for s in range(1,len(x)):
        dx = x[s:] - x[:-s]
        msd.append(np.average(dx**2))
    return msd
print(calc_msd_np(x))

同样,我对 Y 坐标使用 for 循环。基本上,X 和 Y 的 MSD 需要针对每个 ID 进行迭代。

我对此很陌生,所以弄清楚嵌套循环非常具有挑战性。

python numpy csv iteration
1个回答
0
投票

首先将您的 csv 转换为 pandas

df = pd.read_csv("yourcsv")

其次,定义一个名为 MSD 的新列并定义 MSD 的公式。

df["MSD"] = #MSD formula

删除 x 、 y 和时间列。

new_df=df.drop(columns=["x","y","time"],axis=1)

将您的 pandas 转换为 csv。

new_df.to_csv("final.csv")
© www.soinside.com 2019 - 2024. All rights reserved.