我研究了我的问题,但似乎找不到解决方案。我正在尝试将大型pdf文档传输到excel表。当我将数据提取到表中时,其内容如下(提取表):
+---------------+-------+----------+
| details | text | volume |
+---------------+-------+----------+
| 2018-001 - 01 | text1 | Vol. 1 |
| Public | text1 | pp. 1-13 |
| PDF No.1 | text1 | |
| | text1 | |
| 2018-001 - 02 | text2 | Vol. 1 |
| Public | text2 | pp. 1-46 |
| PDF No.2 | text2 | |
| 2018-001 - 03 | text3 | Vol. 1.1 |
| Public | text3 | pp. 1-47 |
| PDF No.3 | text3 | |
+---------------+-------+----------+
如果第1列中的值以“ 2018-001”开头,那么我想将所有其余值分组为一行,直到到达下一个“ 2018-001”为止,如“期望结果”表中的我的例子。非常感谢您的帮助,我是熊猫的新手,我正在寻找解决方案-谢谢。如果取得一些进展,我会在发布过程中发布代码
所需表:
+-------------------------------+----------------+-------------------+
| details | text | volume |
+-------------------------------+----------------+-------------------+
| 2018-001 - 01 Public PDF No.1 | text1 (joined) | Vol. 1 pp. 1-13 |
| 2018-001 - 02 Public PDF No.2 | text2 (joined) | Vol. 1 pp. 1-46 |
| 2018-001 - 03 Public PDF No.3 | text3 (joined) | Vol. 1.1 pp. 1-47 |
+-------------------------------+----------------+-------------------+
答案 0 :(得分:0)
当人们要求输入文本时,是为了他们可以处理您的数据。他们想要的是data = pd.DataFrame(...)
之类的东西,而不是ASCII的艺术(尽管它确实有助于显示您想要完成的工作,因此它并非没有用)。
import pandas as pd
import numpy as np
data = pd.DataFrame(...)
slice_idxes = np.where(data['details'].str.contains('2018-001'))[0].tolist() + [data.shape[0]]
new_data = pd.DataFrame(columns=data.columns)
def idx_gen(idx_list):
for i in range(len(idx_list) - 1):
yield idx_list[i], idx_list[i+1]
for start, stop in idx_gen(slice_idxes):
new_row = data.iloc[start:stop, :]
new_row = new_row.apply(lambda x: x.str.cat(sep=" ")).to_frame().transpose()
new_data = new_data.append(new_row)
这不是非常快速或有效,但是应该可以完成工作。