给出DataFrame
,例如:
0 1 2
0 'a' 6 7
1 'a' 8 9
第一列由字符串组成,其他列为整数。我想仅将常量乘以第1列和第2列。也就是说,避免将字符串相乘。这不是由df = df*cnst
实现的。最干净的方法是什么?
答案 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部分找到更多基本信息。