2017-04-11 47 views
1

我已读csv文件到大熊猫数据帧乘法除了

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

这里第一列(索引列或历元日期时间)的所有列100是数据帧

我的初始数据帧的格式:

  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 

我想仅乘以列由100 1,2,3,4,5而不通过100

改变列0或乘以列

我试图

df.multiply(100) 

但它乘以100包括列0的每一列。

同样在我的列1上,小数点不断被截断为4而不是5像其他列一样。我不知道是什么原因造成,即使在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 

回答

2

您可以从第一列由参数index_colread_csv设置索引,然后多:

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