当尝试将字符串列名称添加'ratio'
到PeriodIndex(对于列)时,会出现问题.PeriodIndex只能包含Periods
,而不能包含字符串.
添加新列的常用方法,
df['ratio'] = ...
不起作用,因为它假定'ratio'
可以添加到当前列索引.
为了避免这个问题,我们需要将PeriodIndex更改为可以容纳Periods和字符串的通用索引.一种方法是使用pd.concat
:
import numpy as np import pandas as pd columns = pd.period_range('1999-1-1','2000-1-1', freq='Q') df = pd.DataFrame(np.random.randint(10, size=(4, len(columns))), columns=columns) ratio = pd.DataFrame({'ratio': df['1999Q1'].div(df['1999Q2'])}) df = pd.concat([df, ratio], axis=1) print(df)
产量
1999Q1 1999Q2 1999Q3 1999Q4 2000Q1 ratio 0 9 0 3 4 6 inf 1 3 9 5 5 3 0.333333 2 2 6 8 7 0 0.333333 3 0 8 7 7 3 0.000000
或者,如果您确实不需要列标签为Periods,那么您可以将它们转换为字符串:
df = pd.DataFrame(np.random.randint(10, size=(4, len(columns))), columns=columns) df.columns = map(str, df.columns) df['ratio'] = df['1999Q1'].div(df['1999Q2'])