Pandas 将带有时间后缀的字符串转换为numpy格式的数字
我有一个数值为“1.0s”、“100ms”等的numpy序列。我无法绘制这个(在将数组放入序列后,使用pandas),因为pandas无法识别这些是数字。我如何让numpy或pandas在注意后缀的同时将其外推到数字中?此代码可以解决您的问题Pandas 将带有时间后缀的字符串转换为numpy格式的数字,pandas,numpy,Pandas,Numpy,我有一个数值为“1.0s”、“100ms”等的numpy序列。我无法绘制这个(在将数组放入序列后,使用pandas),因为pandas无法识别这些是数字。我如何让numpy或pandas在注意后缀的同时将其外推到数字中?此代码可以解决您的问题 # Test data se = Series(['10s', '100ms', '1.0s']) # Pattern to match ms and as integer of float pat = "([0-9]*\.?[0-9]+)(ms|s)"
# Test data
se = Series(['10s', '100ms', '1.0s'])
# Pattern to match ms and as integer of float
pat = "([0-9]*\.?[0-9]+)(ms|s)"
# Extracting the data
df = se.str.extract(pat, flags=0, expand=True)
# Renaming columns
df.columns = ['value', 'unit']
# Converting to number
df['value'] = pd.to_numeric(df['value'])
# Converting to the same unit
df.loc[df['unit']=='s', ['value', 'unit']] = (df['value'] * 1000, 'ms')
# Now you are ready to plot !
print(df['value'])
# 0 10000.0
# 1 100.0
# 2 100000.0
见问题
- 使用
pandas.t系列.frequencies.to_offset
- 转换为时间增量
- 获得总秒数
就在文档中:Regex?现在他有两个问题……;)
from pandas.tseries.frequencies import to_offset
s = pd.Series(['1.0s', '100ms', '10s', '0.5T'])
pd.to_timedelta(s.apply(to_offset)).dt.total_seconds()
0 0.0
1 0.1
2 10.0
3 300.0
dtype: float64