【问题标题】:Iterating over a list of strings for operations in Python迭代字符串列表以进行 Python 中的操作
【发布时间】:2018-01-18 14:41:55
【问题描述】:

我正在尝试在 Python 3.6.1 中执行一个涉及字符串列表的相当简单的循环。本质上,我有一个如下所示的数据框:

      X_out  Y_out  Z_in  X_in  Y_in  Z_in      
Year                                                                
1969    4     3     4      4     3     3
1970    2     0     1      3     2     2
1971    3     1     1      0     1     2
1972    2     0     0      3     1     0

我想找出 X、Y 和 Z 的净变化,使它们成为此数据框中的新列。

最简单的形式是

df['x_net'] = df['x_in'] - df['x_out']
df['y_net'] = df['y_in'] - df['y_out']
df['z_net'] = df['z_in'] - df['z_out']

但实际上,需要以这种方式创建大约十五列。既然它会是一只熊,我认为最好放入一个函数,或者至少是一个循环。我列出了我们最初的“根”变量,没有后缀,如下所示:

root_vars = ['x', 'y', 'z']

我认为我的代码可能(?)看起来像:

for i in root_vars:
    df['%s_net'] = df['%s_in'] - df['%s_out'] %(root_vars_[i])

但这绝对是不对的。有人可以帮我看看这个吗?

非常感谢!

【问题讨论】:

    标签: python string python-3.x function loops


    【解决方案1】:

    您可以使用相对较新的 (Python 3.6) formatted string literals

    for i in root_vars:
        df[f'{i}_net'] = df[f'{i}_in'] - df[f'{i}_out']
    

    每个字符串前的f 前缀会导致{i} 被变量i 的值替换。如果您希望代码在 3.6 之前的 Python 版本中可用,则可以使用更常见的格式:

    for i in root_vars:
        df['{}_net'.format(i)] = df['{}_in'.format(i)] - df['{}_out'.format(i)]
    

    【讨论】:

    • 成功了!非常感谢,我真的很感激!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-24
    • 1970-01-01
    • 1970-01-01
    • 2021-04-14
    • 1970-01-01
    相关资源
    最近更新 更多