Вы можете заменить NaN
для столбца '項目'
, проиндексировав исходный df и вызвав fillna
, а затем отфильтровать строки, содержащие строку 'プレサンス'
, и перезаписать значения строк с помощью список пустых строк, во-первых мы shift
строк на 1 вниз, поэтому он делает заголовок:
In[111]:
newFile = df1.shift(1)
newFile['項目'] = newFile['項目'].fillna(df.loc['クライアント名'])
newFile.loc[newFile['項目'].str.contains('プレサンス'),['数量','単位','単価', '金額']] = ['','','','']
newFile
Out[111]:
項目 金額 数量 単位 単価
1 プレサンス ロジェ 和泉中央
2 Yahoo!リスティング 12月分 12/1〜12/31 YSS 91188 1 式 NaN
3 Yahoo!リマーケティング 12月分 12/1〜12/31 25649 1 式 NaN
4 Yahoo!ディスプレイネットワーク 12月分 12/1〜12/31 13211 1 式 NaN
5 Googleリスティング 12月分 12/1〜12/31 131742 1 式 NaN
6 Googleリマーケティング 12月分 12/1〜12/31 35479 1 式 NaN
7 Googleディスプレイネットワーク 12月分 12/1〜12/31 18999 1 式 NaN
8 プレサンス グラン 茨木
9 Yahoo!リスティング 12月分 12/1〜12/31 YSS 113373 1 式 NaN
10 Yahoo!リマーケティング 12月分 12/1〜12/31 28775 1 式 NaN
11 Yahoo!ディスプレイネットワーク 12月分 12/1〜12/31 19010 1 式 NaN
12 Googleリスティング 12月分 12/1〜12/31 158389 1 式 NaN
13 Googleリマーケティング 12月分 12/1〜12/31 45530 1 式 NaN
14 Googleディスプレイネットワーク 12月分 12/1〜12/31 23224 1 式 NaN
15 プレサンス ロジェ 江坂
Теперь, когда вы хотите добавить отступы, чтобы сделать его более читабельным, мы может хранить местоположения индекса, где находятся итоговые значения, затем выполнять итерацию по ним и нарезать df, добавлять их к dict, а затем вызывать concat
для вертикальной укладки дополненных фрагментов:
In[112]:
pos = newFile.index[newFile['項目'].str.contains('プレサンス')]
pos
Out[112]: Int64Index([1, 8, 15], dtype='int64')
Теперь создайте dict для каждого среза и добавьте пустую строку:
In[115]:
d = {}
i = 0
for p in pos:
if p == pos[0]:
d[p] = newFile.loc[:pos[i+1]-1].append(pd.Series('',newFile.columns), ignore_index=True)
elif (i + 1) > len(pos) - 1:
d[p] = newFile.loc[pos[i-1]+1:]
else:
d[p] = newFile.loc[p:pos[i+1]-1].append(pd.Series('',newFile.columns), ignore_index=True)
i = i + 1
pd.concat(d, ignore_index=True)
Out[115]:
項目 金額 数量 単位 単価
0 プレサンス ロジェ 和泉中央
1 Yahoo!リスティング 12月分 12/1〜12/31 YSS 91188 1 式 NaN
2 Yahoo!リマーケティング 12月分 12/1〜12/31 25649 1 式 NaN
3 Yahoo!ディスプレイネットワーク 12月分 12/1〜12/31 13211 1 式 NaN
4 Googleリスティング 12月分 12/1〜12/31 131742 1 式 NaN
5 Googleリマーケティング 12月分 12/1〜12/31 35479 1 式 NaN
6 Googleディスプレイネットワーク 12月分 12/1〜12/31 18999 1 式 NaN
7
8 プレサンス グラン 茨木
9 Yahoo!リスティング 12月分 12/1〜12/31 YSS 113373 1 式 NaN
10 Yahoo!リマーケティング 12月分 12/1〜12/31 28775 1 式 NaN
11 Yahoo!ディスプレイネットワーク 12月分 12/1〜12/31 19010 1 式 NaN
12 Googleリスティング 12月分 12/1〜12/31 158389 1 式 NaN
13 Googleリマーケティング 12月分 12/1〜12/31 45530 1 式 NaN
14 Googleディスプレイネットワーク 12月分 12/1〜12/31 23224 1 式 NaN
15
16 Yahoo!リスティング 12月分 12/1〜12/31 YSS 113373 1 式 NaN
17 Yahoo!リマーケティング 12月分 12/1〜12/31 28775 1 式 NaN
18 Yahoo!ディスプレイネットワーク 12月分 12/1〜12/31 19010 1 式 NaN
19 Googleリスティング 12月分 12/1〜12/31 158389 1 式 NaN
20 Googleリマーケティング 12月分 12/1〜12/31 45530 1 式 NaN
21 Googleディスプレイネットワーク 12月分 12/1〜12/31 23224 1 式 NaN
22 プレサンス ロジェ 江坂
Существует defer
атрибут Вы могли поставить блоки сценария для задержки его выполнения до страницы, завершает загрузку.
<script src="myscript.js" type="text/javascript" defer>
// blah blah
</script>
Я не уверен в общей рекомендации об использовании этого атрибута все же.
Править: Как @David указанный, использовать defer="defer"
для XHTML
И можно всегда вставлять код window.onload
событие так, чтобы это выполнилось после загрузки страниц:
window.onload = function () {
// ad codes here
};
Но более поздний подход может создать некоторые проблемы, Вы могли бы хотеть проверить его сначала.
Больше информации об этом сообщении в блоге Dean Edwards, парнем, который записал известному упаковщику JavaScript.
Править: Если размер самого кода рекламы является проблемой, можно всегда задерживать загрузку путем объединения вышеупомянутых методов с инжекцией сценария через document.write
:
function loadScript(src) {
document.write('<script src="' + src + '" type="text/javascript"></script>');
}
Таким образом, получающийся код мог бы выглядеть примерно так:
<script type="text/javascript" defer>
function loadScript(src) {
document.write('<script src="' + src + '" type="text/javascript"></script>');
}
loadScript('http://ads.example.com/advertisements.js');
</script>
Но поскольку я сказал, это зависит от определенного кода рекламы, который Вы получаете также. Из-за положения document.write
запишет, что материалы к не могли бы быть местоположением, которое Вы хотите. Некоторые модификации могли бы быть необходимыми.
function addLoadEvent(func) {
var oldonload = window.onload;
if (typeof window.onload != 'function') {
window.onload = func;
} else {
window.onload = function() {
oldonload();
func();
}
}
}
Вышеупомянутый код является хорошим способом добавить новое onload событие, которое не вмешивается в Ваш существующий JavaScript. Затем можно добавить новое событие загрузки для загрузки рекламных объявлений с помощью кода ниже.
addLoadEvent(function() { // call to loadScript() here });