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

Python Pandas:将选定的列保留为DataFrame而不是Series

崔宇
2023-03-14
问题内容

从pandas DataFrame中选择单个列时(例如df.iloc[:, 0]df['A']df.A等),结果矢量将自动转换为Series而不是单列DataFrame。但是,我正在编写一些将DataFrame作为输入参数的函数。因此,我更喜欢处理单列DataFrame而不是Series,以便函数可以假定df.columns是可访问的。现在,我必须使用来将Series显式转换为DataFrame
pd.DataFrame(df.iloc[:,0])。这似乎不是最干净的方法。是否有更优雅的方法直接从DataFrame进行索引,以使结果为单列DataFrame而不是Series?


问题答案:

正如@Jeff提到的,有几种方法可以做到这一点,但我建议使用loc / iloc来使其更明确(如果尝试歧义,请提早出错):

In [10]: df = pd.DataFrame([[1, 2], [3, 4]], columns=['A', 'B'])

In [11]: df
Out[11]:
   A  B
0  1  2
1  3  4

In [12]: df[['A']]

In [13]: df[[0]]

In [14]: df.loc[:, ['A']]

In [15]: df.iloc[:, [0]]

Out[12-15]:  # they all return the same thing:
   A
0  1
1  3

在整数列名称的情况下,后两种选择消除了歧义(正是创建loc / iloc的原因)。例如:

In [16]: df = pd.DataFrame([[1, 2], [3, 4]], columns=['A', 0])

In [17]: df
Out[17]:
   A  0
0  1  2
1  3  4

In [18]: df[[0]]  # ambiguous
Out[18]:
   A
0  1
1  3


 类似资料:
  • 我有这个。我想创建一个,它保存如下 但是通过这样做 问题是每个现在都保存为。例如,第3行是 对于那些怀疑论者,我尝试了,它是。第2列工作正常。 如何保存为每行,而不是?也就是说,我如何保存所有行的作为而不是?

  • 问题内容: 在使用Python Pandas进行读写时,是否可以保留csv文件中列的顺序?例如,在此代码中 输出文件可能会有所不同,因为未保留列。 问题答案: 当前版本的Pandas(‘0.11.0’)中似乎存在一个错误,这意味着Matti John的答案将不起作用。如果您指定要写入文件的列,则它们将按字母顺序书写,而只是根据cols中的列表重新标记。例如,此代码: 导致以下(错误)输出: 您可以

  • 在查看了这里、这里和文档之后,我仍然无法找到一种方法来根据所有这些条件从数据帧中选择行: 按给定列的值列表中给定的顺序返回行 举个例子,让我们 让 然后我想得到以下数据帧: 我怎样才能做到这一点?Zero的答案看起来很有希望,因为它是我发现的唯一一个保留原始索引的答案,但它不适用于重复。关于如何修改/推广它有什么想法吗?

  • 问题内容: 我有一个带有4列的pandas DataFrame,我想创建一个 只有 三个列的 新 DataFrame 。这个问题类似于:从数据框中提取特定的列,但对于不是R的熊猫来说。以下代码不起作用,会引发错误,并且肯定不是熊猫的方式。 熊猫人做这件事的方法是什么? 问题答案: 有一种方法可以做到,它实际上看起来类似于R 在这里,您只是从原始数据框中选择所需的列,并为这些列创建变量。如果您想完全

  • 我想将pandas数据帧保存为csv文件,问题是要将np.array转换为字符串。 我想将数组保存为数组,但在文档中找不到任何有用的内容。 解数独=[123345894324321321](整数列表) n_splits=3(整数) 最终结果应该是: [123 345 894 324 321 321] 1,[123 345 894 324 321 321] 3,[123 345 894 324 32

  • 我有一个选择控件: 然后使用jQuery发送AJAX请求,序列化表单: 但是,例如,如果我选择类别1,则serialize()函数序列化标签,而不是选项的值。因此请求将为 有没有一种方法告诉函数发送值,像这样: