如何根据certian列值重新排列列表的列表?

时间:2018-02-02 15:51:13

标签: python csv numpy

我正在阅读包含表单数据的csv文件。

person,1,125,321,123,532
person,1,123,521,123,632
person,10,324,345,12,456
chair,7000,123,45,12,643

我可以用my_data = np.genfromtxt(filename,delimiter=",",dtype=None)阅读 然后我有一个ndarray。

我想根据他们的第二列值重新订购它们。 输出应该是

形式的ndarray
[
[[person,1,125,321,123,532],[person,1,123,521,123,632]]
[person,10,324,345,12,456]
[chair,7000,123,45,12,643]
]

我的方式是

my_data = np.genfromtxt(filename,delimiter=",",dtype=None)
tem = []
for x in range(0,8000,22):
    fake_array=([a_value for a_value in my_data if (a_value[1]==x)])
    if (len(fake_array)>0):
        tem.append(fake_array)

这给了我写作结果但我觉得这是一个非常糟糕的方法。 谁能建议我这样做的优化方法? 特别是因为I迭代从0到8000,即使可能只有10个值。 并嵌套在迭代遍历数组的所有行中。

我认为也可以使用函数numpy.unique https://docs.scipy.org/doc/numpy/reference/generated/numpy.unique.html。 我不确定如何实施它?

3 个答案:

答案 0 :(得分:0)

你应该在这里使用python库<IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^index\.php$ - [L] RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_FILENAME} !-d RewriteRule . /index.php [L] </IfModule> ,而不是试图在numpy中做所有事情(它对你正在做的事情来说太低了)。有了大熊猫,您可以通过以下方式来实现:

pandas

答案 1 :(得分:0)

就这样做,

my_data = my_data[my_data[:,1].argsort()]

答案 2 :(得分:0)

尝试使用以下代码:

df = pd.read_csv("D:/path/test.csv",header=None,sep=',')
df=df.rename(columns={0:"Name",1:"Value1",2:"Value2",3:"Value3",4:"Value4",5:"Value5"})
df=df.sort_values(by="Value1")

您将获得以下输出:

    Name    Value1  Value2  Value3  Value4  Value5
0   person  1   125 321 123 532
1   person  1   123 521 123 632
2   person  10  324 345 12  456
3   chair   7000    123 45  12  643