Pandas 将带有时间后缀的字符串转换为numpy格式的数字

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)"

我有一个数值为“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)"
# 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