1

次のように float AND unit を含む数値列を変換する最良の方法は何ですか?

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

たとえば、期待されるバイト単位の出力:

211.301*1024*1024 = 221565157.376

このような多くの質問: 人間が読めるバージョンのファイル サイズを取得するための再利用可能なライブラリ?

反対の方法を示しています:数値を人間が読める形式に変換します。人間が読める形式を float に変換する方法は?

分割よりも効率的な方法はありますか:

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

次に、単位列を倍数の if's ? で解析します。

ありがとう

4

3 に答える 3

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
于 2016-01-26T15:49:08.207 に答える
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

于 2016-01-26T15:54:42.223 に答える