将操作应用于pandas中的Dataframe中的列的子集

时间:2017-03-06 16:07:38

标签: python python-3.x pandas dataframe

给出DataFrame,例如:

   0  1  2
0 'a' 6  7  
1 'a' 8  9   

第一列由字符串组成,其他列为整数。我想仅将常量乘以第1列和第2列。也就是说,避免将字符串相乘。这不是由df = df*cnst实现的。最干净的方法是什么?

2 个答案:

答案 0 :(得分:4)

这是一个更通用的解决方案:

数据:

In [200]: df
Out[200]:
     A  B    C          D
0  aaa  6  7.1 2001-01-01
1  bbb  8  9.2 2017-02-13

让我们找到所有数字列:

In [201]: num_cols = df.columns[df.dtypes.map(lambda x: np.issubdtype(x, np.number))]

In [202]: num_cols
Out[202]: Index(['B', 'C'], dtype='object')

现在我们只能对数字列进行数学运算:

In [203]: df[num_cols] *= 10

结果:

In [204]: df
Out[204]:
     A   B     C          D
0  aaa  60  71.0 2001-01-01
1  bbb  80  92.0 2017-02-13

Dtypes:

In [205]: df.dtypes
Out[205]:
A            object
B             int64
C           float64
D    datetime64[ns]
dtype: object

答案 1 :(得分:1)

您可以使用iloc(对于基于位置的整数索引)或loc(对于基于标签的索引)来获取您希望乘以的列的子集。在这种情况下,任何一个都可以工作,因为您的列似乎用数字标记。我们还可以使用扩充赋值运算符*=

df.iloc[:, [1, 2]] *= cnst

可以在文档的Indexing and Selecting Data部分找到更多基本信息。