如何清除数据帧中的所有数据,以便它们为空,以便下次通过 for 循环迭代?



我已经构建了一个脚本,该脚本使用Google Analytics API从多个视图ID获取数据。代码的最后是一个for循环,它运行在我构建的许多函数中,并从中构建数据帧。我想发生的是;循环/迭代";对于每个存储,数据都被附加到循环外的新数据帧中。不过,我一直遇到一个问题,第一个视图ID的数据附加得很好,但当它到达第二个视图ID时,它似乎保留了旧数据(来自第一次迭代(,并在覆盖某些值时将其加倍。

例如,此代码。。。。

lz = zip(LI, DN, VI, V, DA, S, D)
sd = '2020-08-01'
ed = '2020-08-31'
parser = argparse.ArgumentParser(
formatter_class=argparse.RawDescriptionHelpFormatter,
parents=[tools.argparser])
flags = parser.parse_args([])
flow = client.flow_from_clientsecrets(
CLIENT_SECRETS_PATH, scope=SCOPES,
message=tools.message_if_missing(CLIENT_SECRETS_PATH))
dFI = {'DP7': 'arsseven.dat',
'DP6': 'arssix.dat',
'DP4': 'arsfour.dat',
'DP0': 'arszero.dat'}
hSeg = {'DP7': {'X': 'gaid::3fifjFfj33rokQ', 'Y': 'gaid::friH58F939Fgoj3I'},
'DP6': {'Z': 'gaid::fotkj345DdjgIcg', 'Y': 'gaid::eofWfjF5834cVfj'},
'DP4': {'W': 'gaid::fkormvroE333nr3fg'},
'DP0': {'V': 'gaid::Jfoeo455efFggrjor'}}
gaDO = []
gaDT = []
def getGADO(VI, sd, ed):
l = vi_start + str(int(VI))
response = analytics.reports().batchGet(
body={
'reportRequests': [
{
'viewId': l,
'dateRanges': [{'sd': sd, 'ed': ed}],
'metrics': [
{'expression': 'ga:users'},
{'expression': 'ga:avgSessionDuration'}
],
'dimensions': [
{'name': 'ga:channelGrouping'}
]
}]}).execute()
report_list = response.get('reports')
for report in report_list:
data_rows = report.get('data', {}).get('rows', [])
for row in data_rows:
dimensions_in_row = row.get('dimensions')
metrics_rows = row.get('metrics')
for metrics in metrics_rows:
metrics_values = metrics.get('values')
full_row_data = dimensions_in_row + metrics_values
gaDO.append(full_row_data)
gaDON = []
for i in gaDO:
new_tuple = []
new_tuple.append(i[0])
new_tuple.append(int(i[1]))
new_tuple.append(float(i[2]))
gaDON.append(tuple(new_tuple))
colO = [
#Dimensions
'DCG',
#Metrics
'Users', 'ASD']
dfO = pd.DataFrame(gaDON, columns = colO)
print(dfO)
return dfO
def getGADT(VI, DA, V, sd, ed):
l = vi_start + str(int(VI))
response = analytics.reports().batchGet(
body={
'reportRequests': [
{
'viewId': l,
'dateRanges': [{'sd': sd, 'ed': ed}],
'metrics': [
{'expression': 'ga:users'}
],
'dimensions': [
{'name': 'ga:channelGrouping'},
{'name': 'ga:segment'}
],
'segments': [
{
'segmentId': hSeg[DA][V]
}]
}]}).execute()
report_list = response.get('reports')
for report in report_list:
data_rows = report.get('data', {}).get('rows', [])
for row in data_rows:
dimensions_in_row = row.get('dimensions')
metrics_rows = row.get('metrics')
for metrics in metrics_rows:
metrics_values = metrics.get('values')
full_row_data = dimensions_in_row + metrics_values
gaDT.append(full_row_data)
gaDTN = []
for i in gaDT:
new_tuple = []
new_tuple.append(i[0])
new_tuple.append(int(float(i[2])))
gaDTN.append(tuple(new_tuple))
colT = [
#Dimensions
'DCG',
#Metrics
'TU']
dfT = pd.DataFrame(gaDTN, columns = colT)
print(dfT)
return dfT
dcgX = pd.DataFrame()
for LI, DN, VI, V, DA, S, D in locations_zip:
dID_str = str(int(LI))
stor_str = dFI[DA]
storage = file.Storage(stor_str)
credentials = storage.get()
if credentials is None or credentials.invalid:
credentials = tools.run_flow(flow, storage, flags)
http = credentials.authorize(http=httplib2.Http())
analytics = build('analytics', 'v4', http=http, discoveryServiceUrl=DISCOVERY_URI)
vi_start = 'ga:'
dfOX = getGADO(VI, sd, ed)
dfTX = getGADT(VI, DA, V, sd, ed)

dcg = pd.merge(dfOX, dfTX, how = 'outer', on = ['DCG']).fillna(0)
dcg = dcg[['DCG', 'Users', 'TU', 'ASD']]
dcg.insert(loc=0, column='LI', value=LI)
dcg.insert(loc=1, column='DN', value=DN)

dcgx = dcgX.append(dcg)

当它穿过前两个商店时会产生这样的东西。。。

编辑:更改了表格,试图显示并非每个视图ID都有相同的标准化维度行/值集,这些行/值将从视图ID匹配到视图ID。例如,CWA只有有机搜索和付费搜索,但没有显示。

╔═══════╦═════╦════════════════╦═══════╦═════╦═════╗
║ DI    ║ DN  ║ DFG            ║ Users ║ TU  ║ ASD ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12345 ║ MHA ║ Organic Search ║ 4392  ║ 589 ║ 30  ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12345 ║ MHA ║ Paid Search    ║ 3939  ║ 405 ║ 150 ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12345 ║ MHA ║ Display        ║ 12    ║ 0   ║ 123 ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12346 ║ JBA ║ Organic Search ║ 4392  ║ 589 ║ 30  ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12346 ║ JBA ║ Organic Search ║ 4392  ║ 96  ║ 30  ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12346 ║ JBA ║ Organic Search ║ 2489  ║ 589 ║ 121 ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12346 ║ JBA ║ Organic Search ║ 2489  ║ 96  ║ 121 ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12346 ║ JBA ║ Paid Search    ║ 3939  ║ 405 ║ 150 ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12346 ║ JBA ║ Paid Search    ║ 3939  ║ 80  ║ 150 ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12346 ║ JBA ║ Paid Search    ║ 1345  ║ 405 ║ 45  ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12346 ║ JBA ║ Paid Search    ║ 1345  ║ 80  ║ 45  ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12346 ║ JBA ║ Display        ║ 12    ║ 0   ║ 123 ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12346 ║ JBA ║ Display        ║ 12    ║ 1   ║ 123 ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12346 ║ JBA ║ Display        ║ 400   ║ 0   ║ 60  ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12346 ║ JBA ║ Display        ║ 400   ║ 1   ║ 60  ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12347 ║ CWA ║ Organic Search ║ 4392  ║ 589 ║ 30  ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12347 ║ CWA ║ Organic Search ║ 4392  ║ 96  ║ 30  ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12347 ║ CWA ║ Organic Search ║ 4392  ║ 12  ║ 30  ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12347 ║ CWA ║ Organic Search ║ 2489  ║ 589 ║ 121 ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12347 ║ CWA ║ Organic Search ║ 2489  ║ 96  ║ 121 ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12347 ║ CWA ║ Organic Search ║ 2489  ║ 12  ║ 121 ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12347 ║ CWA ║ Organic Search ║ 5888  ║ 589 ║ 75  ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12347 ║ CWA ║ Organic Search ║ 5888  ║ 96  ║ 75  ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12347 ║ CWA ║ Organic Search ║ 5888  ║ 12  ║ 75  ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12347 ║ CWA ║ Paid Search    ║ 3939  ║ 405 ║ 150 ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12347 ║ CWA ║ Paid Search    ║ 3939  ║ 80  ║ 150 ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12347 ║ CWA ║ Paid Search    ║ 3939  ║ 600 ║ 150 ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12347 ║ CWA ║ Paid Search    ║ 1345  ║ 405 ║ 45  ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12347 ║ CWA ║ Paid Search    ║ 1345  ║ 80  ║ 45  ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12347 ║ CWA ║ Paid Search    ║ 1345  ║ 600 ║ 45  ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12347 ║ CWA ║ Paid Search    ║ 7001  ║ 405 ║ 91  ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12347 ║ CWA ║ Paid Search    ║ 7001  ║ 80  ║ 91  ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12347 ║ CWA ║ Paid Search    ║ 7001  ║ 600 ║ 91  ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12347 ║ CWA ║ Display        ║ 12    ║ 0   ║ 123 ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12347 ║ CWA ║ Display        ║ 12    ║ 1   ║ 123 ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12347 ║ CWA ║ Display        ║ 400   ║ 0   ║ 60  ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12347 ║ CWA ║ Display        ║ 400   ║ 1   ║ 60  ║
╚═══════╩═════╩════════════════╩═══════╩═════╩═════╝

我想要的是它看起来像这样。。。

╔═══════╦═════╦════════════════╦═══════╦═════╦═════╗
║ DI    ║ DN  ║ DFG            ║ Users ║ TU  ║ ASD ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12345 ║ MHA ║ Organic Search ║ 4392  ║ 589 ║ 30  ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12345 ║ MHA ║ Paid Search    ║ 3939  ║ 405 ║ 150 ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12345 ║ MHA ║ Display        ║ 12    ║ 0   ║ 123 ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12346 ║ JBA ║ Organic Search ║ 2489  ║ 96  ║ 121 ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12346 ║ JBA ║ Paid Search    ║ 1345  ║ 80  ║ 45  ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12346 ║ JBA ║ Display        ║ 400   ║ 1   ║ 60  ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12347 ║ CWA ║ Organic Search ║ 5888  ║ 12  ║ 75  ║
╠═══════╬═════╬════════════════╬═══════╬═════╬═════╣
║ 12347 ║ CWA ║ Paid Search    ║ 7001  ║ 600 ║ 91  ║
╚═══════╩═════╩════════════════╩═══════╩═════╩═════╝

我尝试过在循环结束时(在dcgx=dcgx.append(dcg(之后(使用…清除dfOX和dfTX数据帧。。。

del dfOX
del dfTX

但这并没有奏效。我也试过在它们上使用.iloc[0:0],但也不起作用。

我不知道如何在for循环结束时清除数据帧,所以下一次迭代时它是空的。这是我能想到的唯一方法,但还有更好的方法吗?

任何见解都将不胜感激!非常感谢。

尝试将参数keep设置为lastdrop_duplicates

假设您的数据帧名为df

我不会谈论您的代码,但请注意,在panda中使用循环是一种反模式,除非没有其他选择,否则是一个很大的禁忌。

df1 = df.drop_duplicates(subset=['DI','DN','DFG'],keep='last')
DI     DN               DFG   Users     TU    ASD
1   12345.0   MHA    Organic Search   4392.0  589.0   30.0
3   12345.0   MHA    Paid Search      3939.0  405.0  150.0
5   12345.0   MHA    Display            12.0    0.0  123.0
13  12346.0   JBA    Organic Search   2489.0   96.0  121.0
21  12346.0   JBA    Paid Search      1345.0   80.0   45.0
29  12346.0   JBA    Display           400.0    1.0   60.0

最新更新