2016-01-26 58 views
1

單元在python轉換數什麼。將包含浮體和單元的數值列轉換爲以最佳的方式:與到NON人類可讀的格式

df = pd.DataFrame(["211.301 MB","435.5 GB","345.234 Bytes"]) 

在字節預期輸出例如:

211.301*1024*1024 = 221565157.376 

像這樣的許多問題: Reusable library to get human readable version of file size?

都出現了做相反的方式:轉換數人READA BLE。如何將人類可讀性轉換爲浮點數?

有沒有更有效的方法不是分裂:

spl = pd.DataFrame(dataf['Total_Image_File_Size'].str.split(' ',expand=True)) 

,然後用倍數,如果的解析單位列?

感謝名單

+3

只需創建一個字典,將字母映射到指數? '{'K':2 ** 10,'M':2 ** 20,...}' –

回答

3

我覺得這個應該工作:https://pypi.python.org/pypi/humanfriendly

>>> import humanfriendly 
>>> user_input = raw_input("Enter a readable file size: ") 
Enter a readable file size: 16G 
>>> num_bytes = humanfriendly.parse_size(user_input) 
>>> print num_bytes 
17179869184 
>>> print "You entered:", humanfriendly.format_size(num_bytes) 
You entered: 16 GB 
+0

哇,我錯過了這一個。這很棒 ! – Chargaff

1

您可以創建功能,將文本轉換爲數值並使用apply

import pandas as pd 

df = pd.DataFrame(["211.301 MB","435.5 GB","345.234 Bytes"]) 


def convert(text): 

    parts = text.split(' ') 

    value = float(parts[0]) 

    if parts[1] == 'KB': 
     value *= 1024 
    elif parts[1] == 'MB': 
     value *= 1024 * 1024 
    elif parts[1] == 'GB': 
     value *= 1024 * 1024 

    return value 



df['value'] = df[0].apply(convert) 


      0   value 
0  211.301 MB 2.215652e+08 
1  435.5 GB 4.566548e+08 
2 345.234 Bytes 3.452340e+02 

編輯:你可以使用humanfriendly而不是if/elif

1

只是另一個想法。

>>> for size in "211.301 MB", "435.5 GB", "345.234 Bytes": 
     number, unit = size.split() 
     print float(number) * 1024**'BKMGT'.index(unit[0]) 

221565157.376 
4.67614564352e+11 
345.234 
+0

Downvoted?爲什麼? –