pandas,将数据帧中的所有数值乘以常量

Cen*_*tAu 11 python dataframe 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
Run Code Online (Sandbox Code Playgroud)

我试过df.multiply但它也会影响字符串值,也可以连接几次.

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

有没有办法保持字符串值完整而只将数值乘以常量?

Max*_*axU 15

你可以使用select_dtypes()包括numberdtype或排除objectdatetime64dtypes的所有列:

演示:

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
Run Code Online (Sandbox Code Playgroud)

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

df[df.select_dtypes(include=['number']).columns] *= 3
Run Code Online (Sandbox Code Playgroud)

来自docs:

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

  • 要对原始数据帧进行操作,可以将其修改为:`df [df.select_dtypes(include = ['number']).列]*= 3` (5认同)
  • @Divakar OP可以选择他们想要的任何答案.在此之后,社区,我们随便投票.我觉得你的笨蛋总是受欢迎的. (4认同)
  • @Divakar,我非常喜欢你的NumPy解决熊猫问题的解决方案,特别是当它们的速度提高了几个数量级时;) (3认同)

Jos*_*ron 6

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

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
Run Code Online (Sandbox Code Playgroud)