除了第一列(索引列或纪元日期时间)之外,将所有列乘以100

时间:2017-04-11 05:39:10

标签: python pandas

我已将csv文件读入pandas数据帧

 df= pd.read_csv(filename, sep=",", header = None, usecols=[0, 1, 2, 3, 4, 5])

这是dataframe的格式

我最初的Dataframe:

           0       1        2        3        4     5
 0  1451606820  1.0862  1.08630  1.08578  1.08578  25
 1  1451608800  1.0862  1.08630  1.08578  1.08610  10
 2  1451608860  1.0862  1.08620  1.08578  1.08578  16
 3  1451610180  1.0862  1.08630  1.08578  1.08578  27
 4  1451610480  1.0858  1.08590  1.08560  1.08578  21
 5  1451610540  1.0857  1.08578  1.08570  1.08578   2
 6  1451610600  1.0857  1.08578  1.08570  1.08578   2
 7  1451610720  1.0857  1.08578  1.08570  1.08578   2
 8  1451610780  1.0857  1.08578  1.08570  1.08578   2

 Column '0' = Datetime in Epoch time 
 Columns 1,2,3,4,5 are values 

我想只将第1,2,3,4,5列乘以100而不更改第0列或将第0列乘以100

我试过

  df.multiply(100)  

但它将每列乘以100,包括第0列。

同样在我的第1列上,小数点不断被截断为4而不是像其他列一样被截断。即使在csv文件中,我也不确定是什么导致了

   1451606820 , 1.08622 , 1.08630 , 1.08578 , 1.08578 , 25
   1451608800 , 1.08626 , 1.08630 , 1.08578 , 1.08610 , 10
   1451608860 , 1.08623 , 1.08620 , 1.08578 , 1.08578 , 16
   1451610180 , 1.08627 , 1.08630 , 1.08578 , 1.08578 , 27
   1451610480 , 1.08588 , 1.08590 , 1.08560 , 1.08578 , 21

1 个答案:

答案 0 :(得分:2)

您可以在read_csv中按参数index_col从第一列设置索引,然后设置多个:

df= pd.read_csv(filename, sep=",", header = None, usecols=[0, 1, 2, 3, 4, 5], index_col=0)

然后

df = df.mul(100)

或者:

df = df * 100

另一种解决方案是iloc和多个选择:

df.iloc[:,1:] = df.iloc[:,1:] * 100

df.iloc[:,1:] = df.iloc[:,1:].mul(100)

样品:

df = pd.DataFrame({'A':[1,2,3],
                   'B':[4,5,6],
                   'C':[7,8,9],
                   'D':[1,3,5],
                   'E':[5,3,6],
                   'F':[7,4,3]})

print (df)
   A  B  C  D  E  F
0  1  4  7  1  5  7
1  2  5  8  3  3  4
2  3  6  9  5  6  3

df.iloc[:,1:] = df.iloc[:,1:] * 100
print (df)
   A    B    C    D    E    F
0  1  400  700  100  500  700
1  2  500  800  300  300  400
2  3  600  900  500  600  300