[英]Python pandas: sort by multiple columns and add a column with the order numbers
[英]Sort in Python changing column order
我正在从存储在字典中的csv n中读取数据... colName:Value ...格式...但是cols的顺序弄乱了..我想要的顺序与csv相同
码:
def sort_csv():
data = list(csv.DictReader(open("Bl.csv")))
op = open("Bl_S.csv", "wb")
wr = csv.writer(op, quoting=csv.QUOTE_NONE)
sorted_data = sorted(data, key = lambda d:(d['ID'], d['Begin']))
headers = sorted_data[0].keys()
wr.writerow(headers)
for i in sorted_data:
wr.writerow(i.values())
op.close()
不对字典进行排序,因此当您执行以下操作时:
headers = sorted_data[0].keys()
headers
的顺序基本上是随机的。 而且values()
的返回值也是随机的,因此,即使您很幸运并且使用以下命令写行时headers
的正确顺序也是如此:
wr.writerow(i.values())
不同行中的元素不必具有相同的顺序。
您必须分别从文件中读取标题。 同样,在您的情况下使用DictWriter
可能更好。 例如:
with open('Block.csv') as infile, open('Block_sorted.csv', 'wb') as op:
data = sorted(csv.DictReader(infile), key=lambda d: (d['Track_ID'], d['Kp_Begin']))
# read the column names in the correct order.
infile.seek(0)
headers = infile.readline().split()
wr = csv.DictWriter(op, headers, quoting=csv.QUOTE_NONE)
wr.writeheader()
wr.writerows(data)
# don't need to close() files when using "with"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.