当前位置: 首页 > 面试题库 >

在Python Pandas DataFrame中保留列顺序

余阳秋
2023-03-14
问题内容

在使用Python Pandas进行读写时,是否可以保留csv文件中列的顺序?例如,在此代码

import pandas as pd

data = pd.read_csv(filename)
data.to_csv(filename)

输出文件可能会有所不同,因为未保留列。


问题答案:

当前版本的Pandas(‘0.11.0’)中似乎存在一个错误,这意味着Matti
John的答案将不起作用。如果您指定要写入文件的列,则它们将按字母顺序书写,而只是根据cols中的列表重新标记。例如,此代码:

import pandas
dfdict={}
dfdict["a"]=[1,2,3,4]
dfdict["b"]=[5,6,7,8]
dfdict["c"]=[9,10,11,12]
df=pandas.DataFrame(dfdict)
df.to_csv("dfTest.txt","\t",header=True,cols=["b","a","c"])

导致以下(错误)输出:

    b   a   c
0   1   5   9
1   2   6   10
2   3   7   11
3   4   8   12

您可以通过执行以下命令检查已安装的熊猫版本:

pandas.version.version

to_csv的文档在这里

实际上,这似乎是一个已知的错误,并将在即将发布的版本(0.11.1)中修复:

https://github.com/pydata/pandas/issues/3489

更新:仍然没有新版本的熊猫,但是这里描述了一种解决方法,它不需要使用其他版本的熊猫:

github.com/pydata/pandas/issues/3454

因此,将上面的代码块的最后一行更改为以下内容将可以正常工作:

df.to_csv("dfTest.txt","\t",header=True,cols=["b","a","c"], engine='python')

更新,似乎参数“ cols”已重命名为“ columns”,并且参数“
engine”在最近的熊猫版本中已被弃用(不再可用)。此外,此错误已在版本0.19.0中修复。



 类似资料:
  • 问题内容: 我有一个清单 并希望“移动”其值,以便将其更改为 下一步 Python中是否有内置函数可以做到这一点? 还是有比这更好或更短的方法 问题答案: a = [1,2,3,4,5] >>> a.append(a.pop(0)) >>> a [2, 3, 4, 5, 1] 但是,这很昂贵,因为它必须移动整个列表的内容,即O(n)。如果在您的Python版本中可用,则可能是一个更好的选择,它允许

  • 问题内容: Java Set是否保留顺序?有一种方法将Set返回给我,并且假定数据是有序的,但是遍历Set时,数据是无序的。有没有更好的方法来解决这个问题?是否需要更改方法以返回Set以外的内容? 问题答案: 该Set接口不提供任何订购保证。 它的子接口代表根据某种标准排序的集合。在Java 6中,有两个实现的标准容器。他们是和。 除了SortedSet接口之外,还有类。它记住元素插入到集合中的顺

  • 问题内容: 我注意到JSON对象中元素的顺序不是原始顺序。 JSON列表的元素呢?他们的订单得到维护吗? 问题答案: 是的,JSON数组中元素的顺序得以保留。从RFC 7159开始-JavaScript对象表示法(JSON)数据交换格式 (重点是我的): 对象是零个或多个名称/值对的 无序 集合,其中名称是字符串,值是字符串,数字,布尔值,null,对象或数组。 数组是零个或多个值的 有序 序列。

  • 包含由管道分隔的数字列表的文件可以有重复项。需要编写map reduce程序,在原始输入顺序中列出不重复的数字。我可以删除重复项,但不保留输入顺序。

  • Java集是否保持顺序?一个方法返回一个集合给我,假设数据是有序的,但是在集合上迭代,数据是无序的。有更好的方法来管理这个吗?这个方法需要改变来返回集合以外的东西吗?

  • 问题内容: 在ElasticSearch中是否有可能形成可以保留术语顺序的查询? 一个简单的例子是使用标准分析器为这些文档建立索引: 你知道要搜索 你知道搜索 知道为您搜寻 我可以查询,这将返回所有文档,包括第三个文档。 如果我只想检索按此特定顺序排列有术语的文档怎么办?我可以构成一个查询吗? 考虑到仅通过引用文本即可获得短语:(检索第一和第二文档)在我看来,应该有一种方法可以保留不相邻的多个术语