我有一个小程序文件,这里是相关代码:
import numpy as np
import pandas as pd
from docx import Document
#### Setup the file names, also make provisions for having the user select the file ####
SHRD_filename = "SHRD - SVN 12485.docx"
SHDD_filename = "SHDD - SVN 12485.doc"
#SHRD_name = PCB_utility.get_file('Select SHRD file')
#SHDD_name = PCB_utility.get_file('Select SHDD file')
data = []
keys = {}
document_SHRD = Document(SHRD_filename)
tables_SHRD = document_SHRD.tables[30]
for i, row in enumerate(tables_SHRD.rows):
text = (cell.text for cell in row.cells)
if i == 0:
keys = tuple(text)
continue
row_data = dict(zip(keys, text))
data.append(row_data)
df_SHRD = pd.DataFrame.from_dict(data)
#cols = df_SHRD.columns.tolist()
print(df_SHRD.tail(20))
s = df_SHRD['HLR Trace Tag'].str.split(' ').apply(pd.Series, 1).stack()
s.index = s.index.droplevel(-1)
s.name = 'HLR Tags'
del df_SHRD['HLR Trace Tag']
df_SHRD.join(s)
当我最初制作数据帧时,它看起来像这样:
300 HLR-0000094 HLR-0000095 HLR-0000340 LRU-0000440
301 HLR-0000094 HLR-0000095 HLR-0000341 LRU-0000441
302 HLR-0000094 HLR-0000095 HLR-0000342 LRU-0000442
303 HLR-0000675 LRU-0000745
304 HLR-0000676 LRU-0000746
305 HLR-0000677 LRU-0000747
306 HLR-0000678 LRU-0000748
307 HLR-0000679 LRU-0000749
308 HLR-0000680 LRU-0000750
我需要将HLR标记拆分为单独的行。在我的程序结束时它会回来:
300 LRU-0000440
301 LRU-0000441
302 LRU-0000442
303 LRU-0000745
304 LRU-0000746
305 LRU-0000747
306 LRU-0000748
307 LRU-0000749
308 LRU-0000750
但是当我重新打字时:
In [25]:df_SHRD.join(s)
Out[25]:
300 LRU-0000440 HLR-0000094
300 LRU-0000440 HLR-0000095
300 LRU-0000440 HLR-0000340
301 LRU-0000441 HLR-0000094
301 LRU-0000441 HLR-0000095
301 LRU-0000441 HLR-0000341
302 LRU-0000442 HLR-0000094
302 LRU-0000442 HLR-0000095
302 LRU-0000442 HLR-0000342
303 LRU-0000745 HLR-0000675
304 LRU-0000746 HLR-0000676
305 LRU-0000747 HLR-0000677
306 LRU-0000748 HLR-0000678
307 LRU-0000749 HLR-0000679
308 LRU-0000750 HLR-0000680
[457 rows x 2 columns]
对于该命令在IPython窗口中工作但在脚本中不起作用的原因,我们将不胜感激。
答案 0 :(得分:1)
DataFrame.join
(other, ...
)在索引或键列上与其他DataFrame连接列。 通过索引有效地连接多个DataFrame对象 传递清单。
返回:
joined
:DataFrame
join
不是就地操作。如果要存储结果,返回必须分配回另一个变量的结果。
df = df_SHRD.join(s)
在没有print
调用的情况下打印变量时,IPython会显示结果,而在脚本中运行则不会。这是因为IPython的REPL性质。在任何一种情况下,您都必须重新分配结果。尝试在IPython中打印df_SHRD.join(s)
后跟df_SHRD
,你会看到。