将单位为 python 的数字转换为非人类可读格式
Convert number with units in python to NON human readable format
转换包含浮点数和单位的数字列的最佳方法是什么,如:
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?
展示了相反的方法:将数字转换为人类可读的。如何将人类可读转换为浮点数?
有没有比拆分更有效的方法:
spl = pd.DataFrame(dataf['Total_Image_File_Size'].str.split(' ',expand=True))
然后用倍数解析单位列 ?
谢谢
我认为这个应该可行: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
您可以创建将文本转换为值的函数并使用 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
只是另一个想法。
>>> 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
转换包含浮点数和单位的数字列的最佳方法是什么,如:
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?
展示了相反的方法:将数字转换为人类可读的。如何将人类可读转换为浮点数?
有没有比拆分更有效的方法:
spl = pd.DataFrame(dataf['Total_Image_File_Size'].str.split(' ',expand=True))
然后用倍数解析单位列 ?
谢谢
我认为这个应该可行: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
您可以创建将文本转换为值的函数并使用 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
只是另一个想法。
>>> 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