繁体   English   中英

使用 for 循环将值分配给 Pandas DataFrame 列

[英]Assign values with for loops to pandas DataFrame columns

我是 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 循环吗?

如果您已经有一个现有的 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

更简单的是将列表传递给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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM