我的公司要求我解决一个基本的编程问题(我是Python的新手)。
如果我在Excel文件中有一个具有以下布局的数组:
Panel Value
Left 70
Right 50
Top 30
由于代码生成的csv文件按字母顺序对列进行排序;我希望它以以下格式写入Excel:
Panel Value
Left 70
Top 30
Right 50
到目前为止,我对一个csv文件进行排序的代码是:
import pandas as pd
from pandas import ExcelWriter
from pandas import ExcelFile
import xlrd
df = pd.read_excel('Test.xlsx')
df.sort_values(["Panel","Value"], axis=0,
ascending=[True,False], inplace=True)
df.to_csv('Output2.csv')
print(df)
答案 0 :(得分:3)
从评论中我了解到您想进行“手动”排序。因此,在这种情况下,我们必须通过将列表传递到DataFrame.reindex
来对其进行加固:
df = df.set_index('Panel').reindex(['Left', 'Top', 'Right']).reset_index()
Panel Value
0 Left 70
1 Top 30
2 Right 50
完整的示例:
df = pd.DataFrame({'Panel':['Left', 'Right', 'Top'],
'Value':[70, 50, 30]})
print(df, '\n')
df = df.set_index('Panel').reindex(['Left', 'Top', 'Right']).reset_index()
print(df)
Panel Value
0 Left 70
1 Right 50
2 Top 30
Panel Value
0 Left 70
1 Top 30
2 Right 50
Process finished with exit code 0
答案 1 :(得分:1)
您还可以在此处将 pd.Categorical
与ordered=True
结合使用,以根据类别顺序进行排序:
df['Panel'] = pd.Categorical(df['Panel'],categories=['Left','Top','Right'],ordered=True)
final = df.sort_values('Panel')
Panel Value
0 Left 70
2 Top 30
1 Right 50
答案 2 :(得分:0)
此代码将满足您的特定要求。
df = pd.read_excel('Test.xlsx')
data=[]
data.append([df['Panel'][0],df['Value'][0]])
data.append([df['Panel'][2],df['Value'][2]])
data.append([df['Panel'][1],df['Value'][1]])
df = pd.DataFrame(data, columns = ['Panel', 'Value'])
df.to_csv('Output2.csv',index=False)
我假设输入文件始终具有以下顺序:左,右,上。
或者简单地
df = pd.read_excel('Test.xlsx')
df = df.set_index('Panel').reindex(['Left', 'Top', 'Right'])
df.to_csv('Output2.csv')