当前位置: 首页 > 知识库问答 >
问题:

Pandas dataframe和to_numeric:按索引选择列

姬浩渺
2023-03-14

这个问题可能非常愚蠢,但我不知道该怎么做

有一个带有N列的pd.dataframe。我需要选择一些列,按列的索引引用,然后将所有值转换为数字,并在我的dataframe

我已经通过列名引用(比如df['a']=pd.to_numeric(df['a'])完成了这项工作,但仍然坚持使用索引(比如df[1]=pd.to_numeric(df[1])

在这种情况下,对dataframe列引用的正确方法是什么?(python 2.7)

共有2个答案

鲁鸿
2023-03-14

你可能想检查下面的帖子Is. ix()总是比. loc()和. iloc()更好,因为它更快,支持整数和标签访问?

必须[不同的索引选择](http://pandas.pydata.org/pandas-docs/stable/indexing.html#different-索引的选择)

壤驷旭
2023-03-14

您可以使用ix选择列,然后应用to_numeric

import pandas as pd

df = pd.DataFrame({1:['1','2','3'],
                   2:[4,5,6],
                   3:[7,8,9],
                   4:['1','3','5'],
                   5:[5,3,6],
                   6:['7','4','3']})

print (df)
   1  2  3  4  5  6
0  1  4  7  1  5  7
1  2  5  8  3  3  4
2  3  6  9  5  6  3

print (df.dtypes)
1    object
2     int64
3     int64
4    object
5     int64
6    object
dtype: object

print (df.columns)
Int64Index([1, 2, 3, 4, 5, 6], dtype='int64')
cols = [1,4,6]    
df.ix[:, cols] = df.ix[:, cols].apply(pd.to_numeric)

print (df)
   1  2  3  4  5  6
0  1  4  7  1  5  7
1  2  5  8  3  3  4
2  3  6  9  5  6  3

print (df.dtypes)
1    int64
2    int64
3    int64
4    int64
5    int64
6    int64
dtype: object

如果列是strings,而不是int(但看起来像int),则在列表中的数字中添加'

import pandas as pd

df = pd.DataFrame({'1':['1','2','3'],
                   '2':[4,5,6],
                   '3':[7,8,9],
                   '4':['1','3','5'],
                   '5':[5,3,6],
                   '6':['7','4','3']})

#print (df)

#print (df.dtypes)

print (df.columns)
Index(['1', '2', '3', '4', '5', '6'], dtype='object')

#add `''`
cols = ['1','4','6']
#1. ix: supports mixed integer and label based access     
df.ix[:, cols] = df.ix[:, cols].apply(pd.to_numeric)

#2. loc: only label based access
# df.loc[:, cols] = df.loc[:, cols].apply(pd.to_numeric)

#3. iloc: for index based access
# cols = [i for i in range(len(df.columns))]
# df.iloc[:, cols].apply(pd.to_numeric)

print (df)
   1  2  3  4  5  6
0  1  4  7  1  5  7
1  2  5  8  3  3  4
2  3  6  9  5  6  3

print (df.dtypes)
1    int64
2    int64
3    int64
4    int64
5    int64
6    int64
dtype: object

 类似资料:
  • 是否有任何方法可以在数据框中按索引(即整数)选择行,按列名选择列? 我尝试使用loc,但它返回一个错误,我知道iloc只适用于索引。 这是数据帧df的第一行。我愿意选择第一行,名为“Volume”的列,并尝试使用df.loc[0,'Volume']

  • 在本章中,我们将讨论如何对日期进行切片和切块,并且通常会获得pandas对象的子集。 Python和NumPy索引运算符“[]”和属性运算符“。” 可以在各种用例中快速轻松地访问Pandas数据结构。 但是,由于要访问的数据类型不是预先知道的,因此直接使用标准运算符会有一些优化限制。 对于生产代码,我们建议您利用本章中介绍的优化的pandas数据访问方法。 熊猫现在支持三种类型的多轴索引; 下表中

  • 问题内容: 我正在尝试仅使用来自多索引DataFrame的一个索引来创建新的DataFrame。 理想情况下,我想要这样的事情: 和: 本质上,我想删除除level之外的多索引的所有其他索引。是否有捷径可寻? 问题答案: 一种方法是简单地重新绑定到所需的MultiIndex级别。您可以通过指定要保留的标签名称来做到这一点: 或使用级别的整数值: MultiIndex的所有其他级别将在此处消失。

  • 问题内容: 我有以下pd.DataFrame: 它具有带有和层次结构级别的MultiIndex列。该标签从0到n,并为每个标签,有两个和列。 我想子选择此DataFrame的所有(或)列。 问题答案: 有一种方法可以与布尔索引一起使用,以获得预期的结果。

  • 我正在尝试从多索引数据帧中仅使用一个索引来创建新的数据帧。 理想情况下,我想要这样的东西: 和: 基本上,我想删除除level之外的多索引的所有其他索引。有没有一个简单的方法可以做到这一点?

  • 问题内容: 我有一个带有列“ A”和“ B”的多索引数据框。 有没有一种方法可以通过在多索引的一列上进行过滤而不选择将索引重新设置为单列索引来选择行? 例如。 问题答案: 一种方法是使用Index方法: 在0.13,你就可以使用与参数: 注意:如果这是列MultiIndex而不是索引,则可以使用相同的技术: