Python 向dataframe动态添加列

Python 向dataframe动态添加列,python,pandas,dataframe,Python,Pandas,Dataframe,我有一个列名为“a”、“b”、“n”的熊猫数据框 对于每一列,我想显示列的每日变化,并扩展数据框架,使其包括:“a”、“b”、“n”、“a_daily”、“b_daily”、“n_daily_change” 我尝试了以下代码(它给出了keyrerror:“column_names”): 我需要更改什么才能使其工作?使用变量名而不是字符串: for column_name in df: df[column_name + '_daily'] = df[column_name].pct_cha

我有一个列名为“a”、“b”、“n”的熊猫数据框

对于每一列,我想显示列的每日变化,并扩展数据框架,使其包括:“a”、“b”、“n”、“a_daily”、“b_daily”、“n_daily_change”

我尝试了以下代码(它给出了keyrerror:“column_names”):


我需要更改什么才能使其工作?

使用变量名而不是字符串:

for column_name in df:
    df[column_name + '_daily'] = df[column_name].pct_change(freq=1).fillna(0)
for column_names in df:
    df[str(column_names) + '_daily'] = df[column_names].pct_change(freq=1).fillna(0)

名字很重要。使用单数形式:
column\u name

您只需要传递列名,而不是字符串:

for column_name in df:
    df[column_name + '_daily'] = df[column_name].pct_change(freq=1).fillna(0)
for column_names in df:
    df[str(column_names) + '_daily'] = df[column_names].pct_change(freq=1).fillna(0)
此外,我认为您不需要再次将列名转换回
str

for column_names in df:
    df[column_names + '_daily'] = df[column_names].pct_change(freq=1).fillna(0)
应该有用


因此产生错误是因为
df['column\u names']
不存在,iterable是列名,因此将其作为键传递就可以了

您是在
df[column\u names+''.\u daily']
之后吗?我认为你不需要再将专栏转换为
str
,这可能是真的。我尝试在排除故障时添加它。但代码仍然给出了相同的错误。有什么想法吗?我看到了错误:
df['column\u names'].pct\u change(freq=1)。fillna(0)
应该是
df[column\u names]。pct\u change(freq=1)。fillna(0)
Oh是的,这是一个错误,但是,现在我收到另一个错误消息:ValueError:不能在没有频率的情况下移位。数据中可能有inf和NaN值。这可能是问题所在吗?