pandas,将数据框中的所有数值乘以一个常数

新手上路,请多包涵

如何将数据框中的所有数值乘以一个常量而不必明确指定列名?例子:

 In [13]: df = pd.DataFrame({'col1': ['A','B','C'], 'col2':[1,2,3], 'col3': [30, 10,20]})

In [14]: df
Out[14]:
  col1  col2  col3
0    A     1    30
1    B     2    10
2    C     3    20

我尝试了 df.multiply 但它也会通过多次连接字符串值来影响它们。

 In [15]: df.multiply(3)
Out[15]:
  col1  col2  col3
0  AAA     3    90
1  BBB     6    30
2  CCC     9    60

有没有办法在仅将数值乘以常数的同时保持字符串值不变?

原文由 CentAu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.8k
2 个回答

您可以使用 select_dtypes() 包括 number 或排除 objectdatetime64 dtypes 的所有列:

演示:

 In [162]: df
Out[162]:
  col1  col2  col3       date
0    A     1    30 2016-01-01
1    B     2    10 2016-01-02
2    C     3    20 2016-01-03

In [163]: df.dtypes
Out[163]:
col1            object
col2             int64
col3             int64
date    datetime64[ns]
dtype: object

In [164]: df.select_dtypes(exclude=['object', 'datetime']) * 3
Out[164]:
   col2  col3
0     3    90
1     6    30
2     9    60

或更好的解决方案(c) ayhan

 df[df.select_dtypes(include=['number']).columns] *= 3

来自 文档

要选择所有数字类型,请使用 numpy dtype numpy.number

原文由 MaxU - stop russian terror 发布,翻译遵循 CC BY-SA 3.0 许可协议

另一个答案指定了如何只乘以数字列。更新方法如下:

 df = pd.DataFrame({'col1': ['A','B','C'], 'col2':[1,2,3], 'col3': [30, 10,20]})

s = df.select_dtypes(include=[np.number])*3

df[s.columns] = s

print (df)

  col1  col2  col3
0    A     3    90
1    B     6    30
2    C     9    60

原文由 Jossie Calderon 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题