如何使用表中的pandas将字符串行组合成一行,或者如何使用python将语句中的列的不同行连接起来?
输入:如何使用表中的pandas将字符串行组合成一行,或者如何使用python将语句中的列的不同行连接起来?,python,string,pandas,split,concatenation,Python,String,Pandas,Split,Concatenation,输入: LineNo word_num left top width text 1 1 322 14 14 My 1 2 304 4 41 Name 1 3 322 5 9 is 1 4 316 14 20 Raghav 2 1 420
LineNo word_num left top width text
1 1 322 14 14 My
1 2 304 4 41 Name
1 3 322 5 9 is
1 4 316 14 20 Raghav
2 1 420 129 34 Problem
2 2 420 31 27 just
2 3 420 159 27 got
2 4 431 2 38 complicated
1 1 322 14 14 #40
1 2 304 4 41 @gmail.com
2 1 420 129 34 2019
2 2 420 31 27 January
正如您所看到的,有lineNo、left、top和word_num列,所以我尝试使用这两个列获取一些逻辑,也许我可以实现我的解决方案
我想在输出中做一些调整,实际上这个输出是在转换成图像后通过PDF来的,所以它捕捉到了整行,因为整行来了,输出没有意义,我现在想做的是以一种有意义的方式对文本进行分组。例如
让我们说一下,我使用以下方法得到的输出:
g=df['line_num'].ne(df['line_num'].shift()).cumsum()
out='\n'.join(df.groupby(g)['text'].agg(''.join))
打印(输出)
输出=
“我的名字是raghav#40@gmail.com
问题变得复杂了2019美元1月”
预期产量=
“我叫拉格哈夫
*四十
@gmail.com
问题变得复杂了
2019年1月”
无论它们是否在同一行中,它们都在不同的行中,但逻辑上分组在不同的行中
据我所知,我们可以通过以下步骤来实现:
a) 如果x距离<阈值,则对同一行上的单词进行分组
b) 如果y距离<阈值,则下一行上的单词将与上一行分组
阈值为宽度(图像)/100;x距离是从左开始计算的;y距离是从顶部开始计算的
我们可以这样做吗?
如果问题不够清楚,请告诉我!
谢谢
添加了我试图获得输出的图像,其中的数据有点复杂,我已经根据自己的想法对其进行了更改 使用double
join
-与,然后用于输出系列
:
out = '.....'.join(df.groupby('LineNo')['text'].agg(' '.join))
print (out)
My Name is Raghav.....Roll No. # 242
另一个解决方案包括:
编辑:
要回答您的第二个问题,可以尝试像这样迭代该列
phrase = ""
for i in range(0, df.count):
if type(df.iat[i, 'text']) == str:
phrase = phrase + " " + df.iat[i, 'text']
若要添加空格/…,我同意jezrael,请使用str.cat方法。您好,对于单页PDF,@jezrael,如果您可以帮助我使用4页PDF实现同样的效果,对于您的信息,每一页“行号”都从1开始!因此,我使用这个命令接收的输出是将所有文本与数字1连接起来,而我的要求是获得单个行的输出。可能吗?请回复@RaghavenderRohilla-是的,检查答案
EDIT
的最后一段。你能用这个命令告诉我“g=df['line\u num'].ne(df['line\u num'].shift()).cumsum()”什么是“ne”?正在搜索但无法找到?谢谢@RaghavenderRohilla-当然,是检查你的gmail@jezrael我发了一些邮件。
g = df['LineNo'].ne(df['LineNo'].shift()).cumsum()
out = '.....'.join(df.groupby(g)['text'].agg(' '.join))
print (out)
My Name is Raghav.....Roll No. # 242.....hello the problem just.....got more complicated !!!!
phrase = ""
for i in range(0, df.count):
if type(df.iat[i, 'text']) == str:
phrase = phrase + " " + df.iat[i, 'text']