2017-04-11 48 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