要点是我需要编写一个数据库排序程序,它大部分都可以工作,但这里有一点小麻烦;对于最后一部分,它需要作为平均值进行排序,但问题是我的CSV文件没有分隔,所以它看起来像这样:
name name1 score1 score2 score3
0 ['Harry' 'Potter' 9 10 8]
1 ['Scrooge' 'McDuck' 7 5 6]
2 ['Shovel' 'Knight' 4 2 3]
我需要程序将分数从高到低排序为可能的选项之一,但是,列中存在]会导致问题,因此我尝试这样做:
df = pd.read_csv('classa.csv')
print('Sorted scores')
scores3 = df['score3']
scores3 = scores3.replace(']', '')
scores = df[['score1', 'score2', 'score3']].values
a = np.array(df[['score1', 'score2', 'score3']])
b = a.astype(int)
a.sort(axis=1)
df['score1'], df['score2'], df['score3'] = a.T
print(df)
我得到一条错误信息:
Traceback (most recent call last):
File "D:\Python code\Task 3 pandas testing 12.py", line 69, in <module>
b = a.astype(int)
ValueError: invalid literal for int() with base 10: ' 8]'
所以我删除']'的尝试不起作用,我也不知道为什么。有人知道它为什么不能正常工作吗?你知道吗
编辑:@Anand S Kumar,你的解决方案可行,但不是我想要的。 我需要将数据按行水平排序,而不是垂直排序,因此最终结果应该如下所示
name name1 score1 score2 score3
0 ['Harry' 'Potter' 10 9 8]
1 ['Scrooge' 'McDuck' 7 6 5]
2 ['Shovel' 'Knight' 4 3 2]
通常,用于数据库目的的CSV文件如下所示:
name name1 score1 score2 score3
Harry, Potter, 10, 8, 9
但是,由于结果没有分隔,因此它们的前两列有[]和“”。你知道吗
有人告诉我测向排序不会混淆不同列的值,所以我假设如果我不能更改实际列的值,那么我可以尝试使用从高到低排序的值创建另一列,如下所示:
name name1 score1 score2 score3 highestscoretolowestscore
0 ['Harry' 'Potter' 9 10 8] 10 9 8
1 ['Scrooge' 'McDuck' 7 5 6] 7 6 5
2 ['Shovel' 'Knight' 4 2 3] 4 3 2
我在程序中添加了以下内容:
df['highestscoretolowestscore'] = df.sort(['score1','score2','score3'], ascending=False, inplace=True, axis=0)
然而,它导致了这种情况的发生:
name name1 score1 score2 score3 highestscoretolowestscore
0 ['Atticus' 'Finch' 9 10 8 None
1 ['Jem' 'Finch' 7 5 6 None
2 ['Jean Louise 'Finch' 4 2 3 None
所以我认为数据帧分配有问题,但我不确定如何补救。你知道吗
嗯,不知道你的csv看起来怎么样,有一种更好的方法可以根据csv的样子来做。但基本上你的问题是当你这样做的时候-
您只需将分数3指向一个新的系列,这不会改变原始数据帧中的任何内容。你知道吗
你需要做-
示例/演示-
对于您想要的(按行排序),您可以执行(非常类似于您自己的方法)—
相关问题 更多 >
编程相关推荐