[英]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.