【问题标题】:Assign values with for loops to pandas DataFrame columns使用 for 循环将值分配给 pandas DataFrame 列
【发布时间】:2019-07-24 20:20:01
【问题描述】:

我是 Python 初学者,遇到了 for 循环的问题。我想将数字列表分配给不同的 DataFrame 列。手动,我可以使用正确的代码分配我的值,但是复制和粘贴不是一种好的编程方式。

正确的手动代码如下所示:

df = pd.DataFrame(columns=['a', 'b', 'c'], index=range(100))
num = [100,200,300]
df['a'] = num[0]
df['b'] = num[1]
df['c'] = num[2]

df.head()
     a    b    c
0  100  200  300
1  100  200  300
2  100  200  300
3  100  200  300
4  100  200  300

我的 for 循环如下:

df = pd.DataFrame(columns=['a', 'b', 'c'], index=range(100))
for s in strings:
    for n in num:
        df[s] = n

df.head()

     a    b    c
0  300  300  300
1  300  300  300
2  300  300  300
3  300  300  300
4  300  300  300

谁能帮我编写一个类似于我的手动代码的 for 循环?

【问题讨论】:

    标签: python pandas dataframe for-loop


    【解决方案1】:

    更简单的方法是将列表传递给DataFrame 构造函数,则不需要循环:

    df = pd.DataFrame([[100,200,300]], columns=['a', 'b', 'c'], index=range(100))
    print (df.head())
         a    b    c
    0  100  200  300
    1  100  200  300
    2  100  200  300
    3  100  200  300
    4  100  200  300
    

    但如果你想要一个循环解决方案:

    df = pd.DataFrame(columns=['a', 'b', 'c'], index=range(100))
    num = [100,200,300]
    cols = ['a','b','c']
    
    for c, val in zip(cols, num):
        df[c] = val
    print (df.head())
         a    b    c
    0  100  200  300
    1  100  200  300
    2  100  200  300
    3  100  200  300
    4  100  200  300
    

    【讨论】:

      【解决方案2】:

      如果您已经有一个现有的 DataFrame,请使用assign

      df.assign(**dict(zip(df, num)))
      

      如果您不需要,您不必修改所有列!

      df = pd.DataFrame(columns=['a', 'b', 'c', 'd', 'e'], index=range(100))
      df.assign(**dict(zip(['a', 'c', 'e'], num))).head()
      
           a    b    c    d    e
      0  100  NaN  200  NaN  300
      1  100  NaN  200  NaN  300
      2  100  NaN  200  NaN  300
      3  100  NaN  200  NaN  300
      4  100  NaN  200  NaN  300
      

      【讨论】:

      • 非常感谢!它正在解决,但我更喜欢 jezrael 的解决方案,因为我只是更了解它是如何工作的。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-12
      • 2019-10-24
      • 1970-01-01
      • 1970-01-01
      • 2019-04-13
      相关资源
      最近更新 更多