使用for循环python创建和修改数据帧

2024-06-16 10:33:03 发布

您现在位置:Python中文网/ 问答频道 /正文

我不熟悉Python和StackOverflow。希望我的帖子正确:)

问题:在每个for循环中,我试图创建一个新的数据框,向其中添加列,并用数据填充列

方法:通过阅读以前的文章,我了解到我可以使用“exec”创建新的数据帧,但这不是最佳实践。或者,我可以创建一个dic,然后修改df。也一直在尝试使用嵌入式for循环

问题:实际修改并填写已创建(且为空)的df

代码:

df1 = an existing dataframe with date as its index and profit, tax, and revenue for columns 
#tablelist will only have these 4 values
tablelist = ['QTD','YTD','OneYear','Inception']

# Method 1
for table in tablelist:
     #this works
     exec('{} = pd.DataFrame()'.format(table))
     #this doesn't work 
     table['Value'] = df1[profit] - df1[tax]

---> error: 'str' object does not support item assignment

# Output (without line 4)

type(YTD)
pandas.core.frame.DataFrame

#this works but its outside of the loop so it defeats purpose
YTD['Value'] = df1[profit] - df1[tax]                           

方法1没有帮助,因为它在循环之外

# Method 2
d = {}
for i in tablelist1:
    #this works but I cant figure out how add columns and data
    d[i] = pd.DataFrame()

# Output

print(d)

{'QTD': Empty DataFrame
 Columns: []
 Index: [], 'YTD': Empty DataFrame
 Columns: []
 Index: [], 'OneYear': Empty DataFrame
 Columns: []
 Index: [], 'Inception': Empty DataFrame
 Columns: []
 Index: []}

方法2可以工作,但如何添加列和数据

非常感谢您的建议


Tags: columnsand数据方法dataframeforindextable
1条回答
网友
1楼 · 发布于 2024-06-16 10:33:03

第二种方法应该在python中使用。因为定义很清楚。此外,变量的作用域尽可能大。您可以通过查找字典的键轻松查找定义的数据帧。
您可以通过索引添加新列:

d = {}
for i in tablelist1:
    d[i] = pd.DataFrame()
    d[i]['Value'] = df1["profit"] - df1["tax"]

第一个方法使用表数组给定的名称创建全局变量。因此,如果您想附加新列。您不会使用table作为dataframe的变量名,而是使用字符串提供的名称。执行官又来了。我不推荐这种方式,因为变量被定义为全局变量,而且它们的定义方式非常隐蔽。见下文:

import pandas as pd

tablelist = ['QTD','YTD','OneYear','Inception']

for table in tablelist:
    exec('{} = pd.DataFrame()'.format(table))
    exec(table + "['col1'] = []")

print(QTD) # or others

相关问题 更多 >