2017-07-04 60 views
0

我有這樣一個數據幀:如何在熊貓的字符串上執行計算?

Country  Sales Assets 
China  4B  320B 
China  3B  125B 
India  112M  100B 
USA   39M  200B... 

銷售資產產生列在數十億一些價值觀和一些百萬。數十億表示爲B和數百萬爲M。現在我想檢查一個國家的總銷售額,但我不能這樣做,因爲值爲對象類型。所以我從列中剝離了B,並嘗試將它們轉換爲float值。但是像39M這樣的值會導致問題。

由於1十億 = 十億,我想要的值百萬轉換爲在數十億美元。像這樣的值39M應該轉換爲0.039B。所以後來我可以去除所有的B的並將它們轉換爲浮動。

我該怎麼做?

+1

爲什麼不能你只需用正確數量的零代替'B'和'M'? – DeepSpace

+0

爲什麼不使用*數字類型*作爲*數字數據*? –

回答

0

我覺得你可以在billion■如果需要輸出使用:

  • apply因爲lambda函數處理多個列
  • 首先除去由最後一個字符indexing with str並轉換爲int
  • 倍數的dict
  • 最後與replace d值,如果你想更改爲數字,只改變dict值轉換爲floatastype

cols = ['Sales','Assets'] 
d = {'M': 10**-3, 'B':1} 
df[cols] = df[cols].apply(lambda x: x.str[:-1] 
            .astype(int).mul(x.replace(d, regex=True)) 
            .astype(float)) 
print (df) 
    Country Sales Assets 
0 China 4.000 320.0 
1 China 3.000 125.0 
2 India 0.112 100.0 
3  USA 0.039 200.0 

d = {'M': 10**6, 'B':10**9} 
#same solution 
print (df) 
    Country   Sales  Assets 
0 China 4.000000e+09 3.200000e+11 
1 China 3.000000e+09 1.250000e+11 
2 India 1.120000e+08 1.000000e+11 
3  USA 3.900000e+07 2.000000e+11 
0

像這樣的東西應該工作

data=df['Sales'] 

for value in data: 

    char=value[-1] 

    if char=='M' 

     toadd=float(value[:-1]/1000.0) 

    elif char=='B': 
     toadd=float(value[:-1]) 

    totalsales=totalsales+toadd